【问题标题】:Update DataGridView Control DataSource C# Win Forms更新 DataGridView 控件数据源 C# Winforms
【发布时间】:2016-11-20 12:56:33
【问题描述】:

我有一个对象列表,我想每秒重新绑定 DataGridView。我尝试了很多东西,bindingsource、BindingList 和 INotifyPropertyChanged 接口。当您的代码中有静态集合时,它们工作得很好,但是我需要从数据库更新数据源,因此,我必须迭代每个对象并检查它是新对象还是已删除并更新 BindingList,但它是解决方案。我更喜欢每一秒都这样写:

BindingListObeject = new BindingList<MyObject>(ListOfMyObjects);

BindingListObeject.Clear();
//in loop
BindingListObeject.Add(new_object);

DataGridView 将具有滚动功能,并且在重新绑定数据源后必须选择选定的单元格。而且网格不应该闪烁。

我该如何管理?我使用 EF 来获取我想要的对象列表。

【问题讨论】:

  • 您是否尝试过 Suspend/ResumeLayout 以避免闪烁?
  • 是的,我试过了,仍然闪烁

标签: c# winforms bindingsource bindinglist


【解决方案1】:

尝试ObservableCollection() 或任何其他带有 CollectionChange 事件的集合

并且永远不要做像 myCollection = ...anything... 这样的事情,那就是为 myCollection 创建具有新句柄的新对象,而您的网格仍然绑定到旧句柄。只换收藏,不要续订。

【讨论】:

  • 它似乎可以工作,但是当我重新绑定 gridview 数据源时,网格行并没有像我看到的那样受到影响。为了测试,我从列表中删除项目,然后重新绑定数据源,在视图中项目被删除,一切正常,但网格行仍然相同,我将调试更多并在这里写下我的结果
  • 我使用,首先从列表中删除一项,然后再次设置数据源,然后也是 DataGridView.refresh() 但网格行数根本不反映。我还需要在代码端以某种方式更新行,在视图中删除项目。怎么了?
  • 看来这不是一个选项,ObservableCollection 实现了INotifyCollectionChanged,而不是IBindingList,并且DataGridView 不知道INotifyCollectionChanged。 :( 有什么想法吗?我想再次在 win 表单中使用它
  • 因此,您发布的代码不足以了解您遇到麻烦的具体原因。这可能是您做错事的几个可能点。尝试使用围绕网格、集合、集合源的更具体的代码片段以及(重要的,在代码中)您如何尝试更新视图上的可视化数据的新帖子
  • 在我的标题中我说这是一个win forms项目,似乎不可能重新绑定整个数据源而不闪烁和丢失滚动。 ObservableCollection 几乎起作用了。我对解决方案不满意,但我使用了 BindingList,我只是认为没有什么是不可能的,但微软不同意我的猜测:P 谢谢你的时间和帮助
猜你喜欢
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
相关资源
最近更新 更多