如何将列表框中的对象(包括名称和ID)移动到另一个列表框并保存? 我写了这个:
if (lstActivity.SelectedIndex != -1)
{
int intSelectedIndex = lstActivity.SelectedIndex;
if (intSelectedIndex >= 0)
{
listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);
lstActivity.Items.RemoveAt(intSelectedIndex);
}
}
它有效,但是当我想保存它(点击按钮后)时,它会出现异常:“无法将syste.string转换为(Parking_Services.Activity)。”
private void btnSave_Click(object sender, EventArgs e)
{
int intActivityID;
Parking_Services.Service1 ii = new Parking_Services.Service1();
for (int i = 0; i <= listbox.Items.Count; i++) //save item from listbox is wrong
{
intActivityID = ((Parking_Services.Activity)listbox.Items[i]).ActivityID;
string strMessage = ii.AllowUserActivityByType(intUserTypeID, intActivityID, FrmLogin.intUserId);
}
答案 0 :(得分:0)
这是因为您没有在列表框中添加Parking_Services.Activity
类型的对象,而是在以下行中添加了所选ActivityName
的{{1}}:
Parking_Services.Activity
我希望这是一个字符串。相反,你可以试试这个:
listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);
鉴于listbox.Items.Add(lstActivity.SelectedItem);
中的项目属于lstActivity
类型。
答案 1 :(得分:0)
线......
intActivityID = ((Parking_Services.Activity)listbox.Items[i]).ActivityID;
...失败,因为listbox
中的项目是String
而不是Parking_Services.Activity
。它们是String
因为,您在行中添加了String
...
listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);
我认为ActivityName
属性是String
。因此,这两行中的任何一行都存在设计错误。
我建议进行以下修复:将整个Parking_Services.Activity
对象添加到listbox
...
listbox.Items.Add((Parking_Services.Activity)lstActivity.SelectedItem);
...并覆盖ToString()
课程中的Parking_Services.Activity
,以便listbox
正确显示它们:
public class Activity
{
...
public override string ToString()
{
return ActivityName;
}
}
在绘制列表条目时,ListBox
始终在传递给它的ToString()
上调用object
。因此,通过覆盖ToString()
,您可以控制Parking_Services.Activity
的显示方式。