0

我如何将对象(包括名称和 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);

            }
4

2 回答 2

0

这是因为您没有将类型的对象添加Parking_Services.Activity到列表框中,而是在以下行ActivityName中添加了选定对象:Parking_Services.Activity

listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);

我希望这是一个字符串。相反,你可以试试这个:

listbox.Items.Add(lstActivity.SelectedItem);

鉴于 in 中的项目lstActivity是 type Parking_Services.Activity

于 2012-11-21T08:20:15.567 回答
0

线...

intActivityID = ((Parking_Services.Activity)listbox.Items[i]).ActivityID;

...失败,因为其中的项目listboxStrings 而不是Parking_Services.Activitys。它们是Strings,因为您在该行中添加String了 s...

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;
    }
}

在绘制列表条目时, AListBox总是调用传递给它ToString()的s。object因此,通过覆盖ToString(),您可以控制Parking_Services.Activitys 的显示方式。

于 2012-11-21T08:24:13.963 回答