我有一个列表框,我在其中使用以下代码行设置数据源:
ListBox2.DataSource = TextBox2.Text.Select(Function(c) c).ToList()
在此之后,我正在选择第一项,阅读并删除它。但是,当我尝试删除某项内容时
设置DataSource属性后,无法修改项目集合。
所以我做了一些阅读,看来我需要将数据源设置为null
,但是我找不到在VB中执行此操作的方法。
谢谢您的时间!
答案 0 :(得分:1)
否,您不需要将DataSource
设置为null。如果这样做,您将像其他任何变量或属性一样简单地分配Nothing
,但这不是您需要做的。如果要删除该项目,则需要从数据源中删除它。关键是:如果绑定了控件,则您无需修改控件中的数据,而只需修改数据源中的数据即可。
问题是,执行此操作时控件不会自动更新,因为它不知道数据源已更改。您应该做的是将List
绑定到BindingSource
并将其绑定到ListBox
。您可以在设计器中添加BindingSource
。
BindingSource1.DataSource = TextBox2.Text.ToList()
ListBox2.DataSource = BindingSource1
然后您可以在Remove
上调用RemoveAt
,RemoveCurrent
或BindingSource
来删除项目。如果需要,您还可以调用ResetBindings
上的BindingSource
来刷新控件。
请注意,我还从您的代码中删除了多余的Select
调用。 Text
属性的类型为String
,并且String
已经实现了IEnumerable(Of Char)
,因此不需要进行Select
调用,除非您需要除{{1}之外的其他内容}。