繁体   English   中英

C#ListBox:设置DataSource属性时,无法修改Items集合

[英]C# ListBox : Items collection cannot be modified when the DataSource property is set

我创建了以下函数来要求从数据库以及列表框中删除所选记录,这将在按钮Delete Record上进行调用。

功能说明

void DeleteListBox2()
{
    string connstring = String.Format("Server=localhost;Port=***;" +
   "User Id=****;Password=****;Database=****;");

    NpgsqlConnection conn = new NpgsqlConnection(connstring);
    conn.Open();

    for (int i = 0; i < listBox2.SelectedItems.Count; i++)
    {

        var itemname = listBox2.SelectedValue;
        NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM Table WHERE Value = '" + itemname + "'", conn);
        cmd.ExecuteNonQuery();
        MessageBox.Show("Selected record deleted from database");
        listBox2.Items.Remove(listBox2.SelectedItems[i]); //ERROR LINE
        listBox2.Update();

    }
    conn.Close();
}

错误

设置DataSource属性后,将无法修改项目集合。

这将有助于提供其他详细信息,例如您正在使用的框架,WPF,Winforms等。

您的ListBox应将其数据源绑定到List对象。 然后,应该直接从列表中删除视图绑定的列表,然后通知UI发生更改,并且它将进行相应的更新,而不是直接从列表视图组件中删除。

这是将列表视图绑定到列表对象的很好的读物: 将列表框绑定到列表

快速的Google搜索将返回有关更改后如何更新UI的结果,这是winforms的一个: 如何刷新C#WinForms中ListBox的数据源

我建议您在删除数据库中的项目后再次阅读。 因为您可能希望最近具有从数据库到显示的映射。

之后,只需将DataSource属性重新附加到新的记录集合即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM