c#中的列表框刷新()

时间:2011-02-27 22:18:50

标签: 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,

listBox1.Refresh(); is not working,

listBox1.Update(); is not working,


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

你能帮我解决一下如何刷新列表框吗?

10 个答案:

答案 0 :(得分:11)

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

C#.Net 4.0:

listBox1.DataSource = null;
listBox1.DataSource = names;

我注意到第一次设置数据源,它会刷新。 当它被设置,并且你尝试再次设置它时,它不会更新。

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

答案 1 :(得分:3)

使用

进行管理
FirstListBox.DataContext = null;
FirstListBox.DataContext = App.ViewModel;

简单地丢失链接并将所有数据返回给它。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

尝试以下

listBox1.DataBind()

答案 4 :(得分:1)

这些链接可能会有所帮助。

如何更新列表框项目(C#)? - http://arstechnica.com/civis/viewtopic.php?f=20&t=554717

将ArrayList绑定到ListBox - http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/BindArrayListtoListBox.htm

答案 5 :(得分:1)

好吧,没有约束我只管理:

this.Hide();
this.Show();

它重绘了一切......

答案 6 :(得分:1)

我继承了ListBox并添加了一个名为RefreshItems()的公共方法,它可以满足我们的需要。已经实施了所有。我不知道为什么他们没有采用公开方法。

答案 7 :(得分:1)

问题可能来自ListBox SelectionMode。

由于我不知道的原因,当SelectionMode为SelectionMode.None时,数据绑定不起作用。

解决方法可能是:

listBox.SelectionMode = SelectionMode.MultiExtended;
listBox.DataSource = myDatasource;
listBox.SelectionMode = SelectionMode.None;

希望它有所帮助。

答案 8 :(得分:0)

使用应该解决它的BeginUpdate和EndUpdate。 无需设置数据源两次

listBox1.BeginUpdate();

listBox1.DataSource = myList;

listBox1.EndUpdate();

答案 9 :(得分:0)

Windows窗体在加载完成之前查看更改,特别是在Listbox和其他控件上是很棘手的。 要查看数据作为其加载使用invalidate();然后更新();