我正在从一个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);
}
答案 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
。