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>
,但我必须只使用数组。
你能帮我解决一下如何刷新列表框吗?
答案 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();然后更新();