取消选择列表框值

时间:2011-10-27 07:34:27

标签: c# listbox

我正在从一个ListBox中选择项目,然后在按钮点击时将它们添加到第二个ListBox。问题是,当我想从listbox2中取消选择所选项时,它会将“对象引用未设置为对象实例”错误。下面是我在SELECT按钮后面添加的代码。我使用相同的代码取消选择,listbox1替换为listbox2,反之亦然。

注意:正在从数据库中检索listbbox1中的项目,并且在listbox2中选中的项目将保存到数据库

List<int> rowIndexes = new List<int>();

foreach (int index in listBox1.SelectedIndices)
{
    DataRowView view = listBox1.Items[index] as DataRowView;
    string id = view["Course_Id"].ToString();
    string name = view["Course_Name"].ToString();
    listBox2.Items.Add(name);
    rowIndexes.Add(index);
}

try
{
    for (int i = rowIndexes.Count; i > 0; i--)
    {
        dt.Rows.RemoveAt(rowIndexes[i - 1]);
        dt.AcceptChanges();
    }
}

catch (Exception er)
{
    MessageBox.Show(er.Message);
}

2 个答案:

答案 0 :(得分:6)

这是一个猜测,充其量是因为它在第一行失败的说法毫无意义。

我的精神力量告诉我,这实际上是失败的

string id = view["Course_Id"].ToString();

因为视图为空。问题是

DataRowView view = listBox1.Items[index] as DataRowView;

正在尝试将项目从ListBox转换为DataRowView。这将始终返回null,除非由于某些(奇数)原因您使用DataRowView集合填充ListBox.Items。

修改

您可能正在使用DataRowView填充listBox1,但是您正在使用System.String填充listBox2:

string name = view["Course_Name"].ToString();
listBox2.Items.Add(name);

尝试将其更改为

//string id = view["Course_Id"].ToString();
//string name = view["Course_Name"].ToString();
listBox2.Items.Add(view);

答案 1 :(得分:0)

假设这完全是从您的代码中复制的。这一行不正确:

List<int> row Indexes = new List<int>();

应该是:

List<int> rowIndexes = new List<int>();

还有什么是dt

修改

如果确实失败了:

List<int> rowIndexes = new List<int>();

也许你不是:

using System.Collections.Generic;

或者在项目参考中引用System