当前位置: 首页 > 编程语言 > C#

绑定BindingList的DataGridView在值改变时不刷新share

时间:2023-04-10 23:57:20 C#

DataGridView绑定在BindingList的值改变时不刷新。如果我更改列表中某个项目的值,它不会立即显示在网格中。如果我单击已更改的单元格,或者最小化然后最大化它正确更新的窗口,但我需要它自动发生。我之前遇到过同样的问题,但在那种情况下,我必须在值更改的同时更改单元格的背景颜色。这会导致单元格正确刷新。我能让它工作的唯一方法是......dataGridView.DataSource=null;dataGridView.DataSource=myBindingList...但我真的想避免这种情况,因为它会使滚动条弹回到顶部,这意味着我必须再次设置我的单元格背景颜色。当然还有更好的办法。我试过刷新(和刷新父级)、更新和无效,但它们没有做我需要的。我在一些留言板上看到过这个问题,但还没有找到有效的答案。仅当列表项类型实现INotifyPropertyChanged接口时,才会引发项值更改的ListChanged通知。摘录自:http://msdn.microsoft.com/en-us/library/ms132742.aspx所以我的第一个问题是:在您的项目中正确实施INotifyPropertyChanged?您的数据源应实施INotifyPropertyChanged,以便BindingList中的任何更改都反映在datagridview中。类书籍:INotifyPropertyChanged{privateintm_id;私有字符串m_author;私有字符串m_title;publicintID{get{返回m_id;}设置{m_id=值;NotifyPropertyChanged("ID");}}publicstringAuthor{get{返回m_author;}设置{m_author=值;NotifyPropertyChanged("作者");}}publicstringTitle{get{returnm_title;}设置{m_title=值;NotifyPropertyChanged("标题");}}公共事件PropertyChangedEventHandlerPropertyChanged;(stringp){if(PropertyChanged!=null)PropertyChanged(this,newPropertyChangedEventArgs(p));}}BindingListbooks=newBindingList();datagridView.DataSource=书籍;调用myBindingList.ResetBindings()!听起来,您更改的对象通知没有被正确触发/处理。我个人总是在绑定到dataGridView时使用BindingSource对象。我会查看DataGridViewFAQ和DataBindingFAQ并搜索对象更改通知。如果您使用的是ADO.Net,请不要忘记调用.Validate()和.EndEdit()方法。privatevoidrefreshDataGrid(){dataGridView1.DataSource=typeof(List);dataGridView1.DataSource=myBindingList;dataGridView1.AutoResizeColumns();dataGridView1.Refresh();然后每当列表更改时调用refreshDataGrid方法。以上是C#学习教程:绑定BindingList的DataGridView在值变化时不会刷新所有共享内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: