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

时间:2017-02-16 09:06:59

标签: c# visual-studio-2013 listbox

我创建了以下函数来调用从数据库中删除所选记录 以及列表框,它将在按钮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属性时,无法修改项集合。

2 个答案:

答案 0 :(得分:2)

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

您的ListBox应将其数据源绑定到List对象。然后,不应直接从列表视图组件中删除,而应从列表中删除视图绑定的内容,然后通知UI有更改,并相应地更新。

以下是将列表视图绑定到列表对象的精彩内容: Binding Listbox to List

快速谷歌搜索将返回有关如何更改后更新UI的结果,这里是winforms的一个: How to refresh DataSource of a ListBox in C# WinForms

答案 1 :(得分:1)

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

之后只需将 with open('merged_config.py', 'w') as merged_config, \ open(base_config_module.__file__, 'r') as base_config: for line in base_config: if 'import' in line: # copy imports from bas config merged_config.write(line) for item in dir(base_config_module): if item.startswith("__"): # ignore __variables like '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__' ... continue if item == 'SimulationSteps': # ingoring my imports continue item_val = getattr(base_config_module, item) # I had to overwrite the __repr__() method of Enums which I used. Everyting else worked fine. merged_config.write('%s = %s\n' % (item, repr(item_val))) 属性重新附加到新记录集。