c# - 取消选择列表框值

标签 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);
}

最佳答案

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

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

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

因为 View 为空。问题是

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

关于c# - 取消选择列表框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912906/

相关文章:

c# - 使用本地数据库为 winForms 创建安装程序

python - 使一些 Tkinter 列表框项目始终处于选中状态

C# linq FirstOrDefault() 函数

c# - 在Docker容器中运行SQLite内存中单元测试时出错

javascript - 在 DataTable 中使用 LINQ to list<AJAX>

WPF 列表框不会垂直滚动

c# - 以编程方式更改选定的 ListBoxItem

python - 使用 itemcget 在 tkinter 中获取单个列表框项目属性?

C# WPF 列表框聊天

c# - 格式化难读的 try..catch..finally block ?