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