我有一个列表框,我想在其中选择和项目,然后按一个按钮从数据库中删除它。我可以编辑并保存好,只是不删除。
当前代码:
private void button1_Click_3(object sender, EventArgs e)
{
if (listBox1.Items.Count >= 1)
{
if (listBox1.SelectedValue != null)
{
listBox1.Items.Remove(listBox1.SelectedItem);
System.Windows.Forms.MessageBox.Show("Item Deleted");
}
}
else
{
System.Windows.Forms.MessageBox.Show("No ITEMS Found");
}
}
我收到错误:
设置DataSource属性时无法修改项集合。
答案 0 :(得分:2)
File "C:/msys32_out2/mingw32/lib/python2.7/site-packages/serial/serialwin32.py", line 62, in open
raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port '/??/COM12': WindowsError(123, 'The filename, directory name, or volume label syntax is incorrect.')
make: *** [/c/msys32/home/tuant/esp/esp-idf/components/esptool_py/Makefile.projbuild:55: flash] Error 1
这将有效
答案 1 :(得分:0)
假设ListBox上可以选择多个项目。以下逻辑将从UI中删除。此外,如果需要,您可以添加逻辑以从数据库中删除项目。
当数据绑定与数据源不同时,会发生以下异常。
当DataSource属性为时,无法修改项集合 设置
数据源指定数据源,而数据绑定定义数据在检索后如何绑定。通常,数据绑定仅在UI初始化期间发生,并且在此之后不会发生变化 数据源本身可以在控制生命周期内发生变化,但这种情况很少见。
此处,数据源元素会发生变化。
关于你的实际错误。您无法设置DataSource并修改Items属性。这是不允许的。处理此问题的正确方法是将项目添加到数据源。在数据源中插入此选项将使控件自动更新列表。 ListBox控件依赖于DS来存储数据,因此所有更改都必须经过。在极少数情况下,您需要能够直接编辑项目,您必须取消DataSource并手动填充Items集合。但是,通常不需要对DataSource进行此更新。
下面的代码重置数据源
if(listBox1.SelectedItems != null)
{
// Assuming its List of string
var items = listBox1.DataSource as List<string>;
// Remove multiple selected items
var count = listBox1.SelectedItems.Count;
while(count != 0)
{
var selectedItem = listBox1.SelectedItems[count-1];
if(items.ContainsKey(selectedItem))
{
items.Remove(selectedItem);
}
count--;
}
listBox1.DataSource = null;
listBox1.Items.Clear();
listBox1.DataSource = items;
}
存储数据源并对其进行修改以直接更新数据源的优化方法。使用ObservableCollection
类型并更新集合以更新UI。
public class NamesClass : DependencyObject
{
public ObservableCollection<string> Names {get; private set; }
public TestClass()
{
this.Names = new ObservableCollection<string>();
}
}
现在将DependencyObject
类包含为DataSource并更新Names集合。