c#中的列表框刷新()

oca*_*nal 9 c# listbox refresh

int[] arr = int[100];
listBox1.DataSource = arr;
void ComboBox1SelectedIndexChanged(object sender, EventArgs e)
{
    .....//some processes
    listBox1.DataSource = null;
    listBox1.DataSource = arr;
}

is not working,
Run Code Online (Sandbox Code Playgroud)

也,

listBox1.Refresh(); is not working,
Run Code Online (Sandbox Code Playgroud)

也,

listBox1.Update(); is not working,
Run Code Online (Sandbox Code Playgroud)


我知道我可以使用,BindingList<T>但我必须只使用数组.

你能帮帮我怎样才能刷新列表框?

Gre*_*ase 12

我在这里的堆栈交换的第一个答案.

C#.Net 4.0:

listBox1.DataSource = null;
listBox1.DataSource = names;
Run Code Online (Sandbox Code Playgroud)

我注意到第一次设置数据源,它会刷新.当它被设置,并且您尝试再次将它设置为同一个时,它不会更新.

所以我把它设为null,把它设置为同一个,并且它正确地显示给我这个问题.


小智 5

仅当绑定在 dataSource 上的对象通知它自己的更改时,ListBox 才会更新其显示的内容。BindingSource 对象有一个名为 DataSourceChanged 的​​事件。当源更改为不同的对象时,列表框将自行更新。绑定列表时也是如此。如果您更改列表,则不会发生任何事情,因为列表不会通知它已更改。此问题有一个简单的解决方案:使用 BindingList http://msdn.microsoft.com/de-de/library/ms132679%28v=vs.110%29.aspx

BindingList 有 ListChanged 事件,每次列表更改时都会调用(显然)。因此 Windows.Form 对象的 DataBindings 使用 ListChanged 等事件来更新自身。简单的列表不支持此事件。

因此,如果您想使用大量数据绑定,您应该了解: http://msdn.microsoft.com/de-de/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29.aspx


Bal*_*a R 0

尝试以下操作

listBox1.DataBind()
Run Code Online (Sandbox Code Playgroud)

  • .NET 4.0 中没有 DataBind() (15认同)