Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新DataGridView控件数据源C#Win表单_C#_Winforms_Bindingsource_Bindinglist - Fatal编程技术网

更新DataGridView控件数据源C#Win表单

更新DataGridView控件数据源C#Win表单,c#,winforms,bindingsource,bindinglist,C#,Winforms,Bindingsource,Bindinglist,我有一个对象列表,我想每秒重新绑定DataGridView。我尝试了很多东西,bindingsource、BindingList和INotifyPropertyChanged接口。当代码中有静态集合时,它们工作得很好,但我需要从数据库更新数据源,所以,用这种方式,我必须迭代每个对象,检查它是新的还是删除的,并更新BindingList,但这是解决方案。我更喜欢每一秒都这样写: BindingListObeject = new BindingList<MyObject>(ListOfM

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

BindingListObeject = new BindingList<MyObject>(ListOfMyObjects);
DataGridView将进行滚动,并且在重新绑定数据源后必须选择选定的单元格。而且网格也不应该闪烁

我该怎么办?我使用EF获取所需的对象列表。

使用CollectionChange事件尝试或任何其他集合


永远不要做类似于myCollection=…任何…的事情,这会使新对象具有myCollection的新句柄,而此时您的网格仍然绑定到旧句柄。只需更改集合,不进行更新。

您是否尝试过挂起/恢复布局以避免闪烁?是的,我尝试过,但仍在闪烁它似乎可以工作,但当我重新绑定gridview数据源时,网格行并不会像我看到的那样受到影响。对于测试,我将从列表中删除项,然后重新绑定数据源,视图中的项被删除,一切正常,但网格行数仍然相同,我将进行更多调试并将结果写入我使用的列表中,首先从列表中删除一项,然后再次设置数据源,然后再设置DataGridView.refresh(),但网格行数根本不反映。我需要以某种方式更新代码端的行,视图中的项被删除。怎么了?这似乎不是一个选项,ObservableCollection实现的是INotifyCollectionChanged,而不是IBindingList,DataGridView不知道INotifyCollectionChanged(有什么想法吗?我想在win表单中再次使用它。因此,您发布的代码不够,无法理解出现问题的具体原因。这可能是您犯了错误的几个地方。请尝试在新的帖子中,围绕网格、集合、集合源代码和(重要的,在代码中)发布更具体的代码片段你是如何尝试更新视图上的可视数据的?在我的标题中,我说这是一个win forms项目,似乎不可能在不闪烁和丢失滚动的情况下重新绑定整个数据源。ObservableCollection几乎成功了。我对解决方案不满意,但我使用了BindingList,我只是认为没有什么是不可能的,但Microsoft没有I don’我不同意我的猜测:P谢谢你的时间和帮助
BindingListObeject.Clear();
//in loop
BindingListObeject.Add(new_object);