C#中的列表框刷新()

Posted

技术标签:

【中文标题】C#中的列表框刷新()【英文标题】:listbox Refresh() in c# 【发布时间】:2011-07-05 10:02:20 【问题描述】:
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>,但我只能使用数组。

你能帮我如何刷新列表框吗?

【问题讨论】:

【参考方案1】:

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

C# .Net 4.0:

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

我注意到第一次设置数据源时,它会刷新。 设置后,您尝试再次将其设置为相同,它不会更新。

所以我把它设为空,将它设置为相同的,它在这个问题上为我正确显示。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

但在很多情况下,您不想更新现有的 BindingList,而是将其替换为另一个。那么它不会自动更新,因为DataSource仍然指向旧的。【参考方案3】:

设法做到了

FirstListBox.DataContext = null;
FirstListBox.DataContext = App.ViewModel;

只需丢失链接并将所有数据返回给它。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

问题可能来自 ListBox SelectionMode。

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

解决方法可能是:

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

希望对你有帮助。

【讨论】:

谢谢 - 找了好久,..这是我的问题。微软真的很烂! 是的——这有效!就我而言,我使用 listBox.Refresh() 而不是更改 DataSource。【参考方案6】:

好吧,没有绑定我只管理:

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

它重绘一切......

【讨论】:

【参考方案7】:

试试下面的

listBox1.DataBind()

【讨论】:

它可能适用于 .NET 3.5 及更高版本,例如有没有办法在 .NET 2.0 上刷新 .NET 4.0 中没有 DataBind()【参考方案8】:

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

listBox1.BeginUpdate();

listBox1.DataSource = myList;

listBox1.EndUpdate();

【讨论】:

【参考方案9】:

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

如何更新列表框项 (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

【讨论】:

【参考方案10】:

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

【讨论】:

以上是关于C#中的列表框刷新()的主要内容,如果未能解决你的问题,请参考以下文章

在c#中删除listBoxItem时ListBox不刷新

根据选择一个列表框中的项目选择/取消选择多个列表框中的项目 - C# Windows 窗体

C#如何匹配两个列表框中的项目

如何将文本框文本拆分为列表框 C#

列表框 WPF C# 中的 SelectedItem 事件

C# 从列表框拖放到树视图