关键词:
【中文标题】值更改时绑定到 BindingList 的 DataGridView 不刷新【英文标题】:DataGridView bound to BindingList does not refresh when value changed 【发布时间】:2011-03-21 09:23:07 【问题描述】:我有一个绑定到 BindingList(C# Windows 窗体)的 DataGridView。如果我更改列表中某个项目中的一个值,它不会立即显示在网格中。如果我单击更改的单元格,或最小化然后最大化窗口,它会正确更新,但我需要它自动发生。
我之前也遇到过同样的问题,但在这种情况下,我必须在值更改的同时更改单元格的背景颜色。这会导致单元格正确刷新。
我可以让它工作的唯一方法是......
dataGridView.DataSource = null;
dataGridView.DataSource = myBindingList
...但我真的很想避免这种情况,因为它会使滚动条弹回顶部,这意味着我必须再次设置单元格背景颜色。肯定有更好的办法。我已经尝试过 Refresh(以及刷新父级)、Update 和 Invalidate,但它们没有做我需要的。
我在一些留言板上看到过这个问题,但还没有看到有效的答案。
【问题讨论】:
【参考方案1】:仅当列表项类型实现
INotifyPropertyChanged
接口时,才会引发有关项值更改的ListChanged
通知。
取自:http://msdn.microsoft.com/en-us/library/ms132742.aspx
所以我的第一个问题是:正确实现您的项目INotifyPropertyChanged
?
【讨论】:
谢谢,非常感谢【参考方案2】:您的数据源应实现INotifyPropertyChanged
,以使 BindingList 中的任何更改都反映在 datagridview 中。
class Books : INotifyPropertyChanged
private int m_id;
private string m_author;
private string m_title;
public int ID get return m_id; set m_id = value; NotifyPropertyChanged("ID");
public string Author get return m_author; set m_author = value; NotifyPropertyChanged("Author");
public string Title get return m_title; set m_title = value; NotifyPropertyChanged("Title");
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string p)
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(p));
BindingList<Books> books= new BindingList<Books>();
datagridView.DataSource = books;
【讨论】:
这太完美了。非常感谢。 MSDN 应该与 *** 签订合同来做他们的代码示例;微软还有很多不足之处(“这里有一行代码并不能真正帮助你……”) 天才。节省大量时间和代码。不知道PropertyChanged
会在winforms 中工作。非常感谢!【参考方案3】:
只要您的数据发生变化,只需致电myBindingList.ResetBindings()
!
【讨论】:
【参考方案4】:听起来您的更改对象通知未正确触发/处理。 我个人在绑定到 dataGridView 时总是使用 BindingSource 对象。
我会查看DataGridView FAQ 和DataBinding FAQ 并搜索对象更改通知。
如果您使用的是 ADO.Net,请不要忘记调用 .Validate() 和 .EndEdit() 方法。
【讨论】:
【参考方案5】: private void refreshDataGrid()
dataGridView1.DataSource = typeof(List<>);
dataGridView1.DataSource = myBindingList;
dataGridView1.AutoResizeColumns();
dataGridView1.Refresh();
然后,只要您的列表发生更改,只需调用 refreshDataGrid 方法即可。
【讨论】:
为啥 Bindinglist 在数据库更改后不更新?
】为啥Bindinglist在数据库更改后不更新?【英文标题】:WhyBindinglistisnotupdatingafterdatabasechanged?为什么Bindinglist在数据库更改后不更新?【发布时间】:2017-01-2304:08:08【问题描述】:我在Winforms项目中工作。每当我在数据库中添加或... 查看详情
当 BindingList 中的现有项目发生更改时,Listbox 拒绝更新
】当BindingList中的现有项目发生更改时,Listbox拒绝更新【英文标题】:ListboxrefusestoupdatewhenchangesoccurinexistingitemsinaBindingList【发布时间】:2011-08-0616:32:41【问题描述】:一天中的大部分时间我都在发疯,试图让它发挥作用。我的... 查看详情
绑定存储的值更改时表单未更新
】绑定存储的值更改时表单未更新【英文标题】:Formnotupdatedwhenvaluesofbindedstorearechanged【发布时间】:2021-10-0800:17:14【问题描述】:我有一个包含各种元素的表单。例如一个组合框,这里是视图部分:xtype:\'combobox\',fieldLabel:\'Posit... 查看详情
如何在数据绑定值更改时更新图像?
】如何在数据绑定值更改时更新图像?【英文标题】:Howcanyougetanimagetoupdateasadatabindedvaluechanges?【发布时间】:2020-09-1019:03:16【问题描述】:我有一个类cTailoredReading和一个图像的字符串属性。现在,下面的代码有效。当我创建类... 查看详情
如何强制网格在更改时立即将值传播到数据源?
】如何强制网格在更改时立即将值传播到数据源?【英文标题】:Howtoforcegridtopropagatevaluetodatasourceimmediatelyonchange?【发布时间】:2012-04-0704:07:58【问题描述】:我有一个绑定到对象集合的DevExpress的XtraGrid。我希望更改在更改时立... 查看详情
ScaleTransform 绑定但在绑定属性更改时不更新
】ScaleTransform绑定但在绑定属性更改时不更新【英文标题】:ScaleTransformbindsbutdoesnotupdatewhentheboundpropertyischanged【发布时间】:2021-09-0113:23:32【问题描述】:我将ViewScale绑定到Grid的ScaleTransform并且当应用程序启动时它正确缩放2。... 查看详情
为啥我的 ko 计算 observable 在其值更改时不会更新绑定的 UI 元素?
】为啥我的ko计算observable在其值更改时不会更新绑定的UI元素?【英文标题】:WhydoesmykocomputedobservablenotupdateboundUIelementswhenitsvaluechanges?为什么我的ko计算observable在其值更改时不会更新绑定的UI元素?【发布时间】:2012-04-0613:04:00... 查看详情
绑定到 DataRowView 的 Winforms 控件更改行值但不更改 RowState
】绑定到DataRowView的Winforms控件更改行值但不更改RowState【英文标题】:WinformsControlBoundToDataRowViewChangesRowValuesButNotRowState【发布时间】:2019-12-2905:29:34【问题描述】:一个简单的WinForms应用程序,用于了解控件数据绑定。下面的代... 查看详情
附加属性未更新它绑定到的值 (MVVM)
...】:我有一个用绿色矩形填充的ScrollViewer,我需要在每次更改时在TextBlock上报告它的滚动值(或百分比)。我还需要能够通过更改绑定到的属性来更改滚动值。我创建了一个附加属性ScrollViewerBeha 查看详情
在文本更改时访问文本框的复制值
】在文本更改时访问文本框的复制值【英文标题】:AccessCopyValueofTextboxontextchange【发布时间】:2016-12-2215:13:01【问题描述】:我在MS访问中有一个表单,其中包含一个显示表中记录的子表单。我有一个文本框,其内容基于从子集... 查看详情
当通过网络接收的数据更改属性时,如何将控件绑定到属性更改?
】当通过网络接收的数据更改属性时,如何将控件绑定到属性更改?【英文标题】:HowcanIhavecontrolsboundtoapropertychangewhenthepropertychangesbydatareceivedovernetwork?【发布时间】:2020-07-0910:30:23【问题描述】:我有一类用户,它们具有一些... 查看详情
更改类变量的值不会更新在 React 中绑定到它的 HTML 标记
】更改类变量的值不会更新在React中绑定到它的HTML标记【英文标题】:Changingvalueofclassvariabledoesn\'tupdatetheHTMLtagboundtoitinReact【发布时间】:2019-02-2621:58:53【问题描述】:我设计了以下课程。exportdefaultclassDataViewextendsReact.Componentpriv... 查看详情
绑定到 UserControl 中声明的 Storyboard 的属性
...,绑定就会失败。没有错误消息,但是当滑块(源)的值更改时,值不会更新。我想在User 查看详情
更新数据绑定 ComboBox
...;不添加、删除或排序。我已经尝试过引用问题中提供的BindingList解决方案,但没有帮助。我可以看到组合框的DataSource属性在我编辑项目时正 查看详情
绑定到数据源的 DataGridViewComboBox 允许空条目
...可以设置DataGridViewComboBox以允许用户在绑定到数据源(如BindingList)时清除条目?如果可以,如何实现?【问题讨论】:【参考方案1】:通常我会在绑定列表或数据源中 查看详情
如何根据布尔值 (SwiftUI) 更改对象的绑定源?
】如何根据布尔值(SwiftUI)更改对象的绑定源?【英文标题】:HowdoIchangeanobject\'sbindingsourcebasedonaboolean(SwiftUI)?【发布时间】:2020-01-2705:08:00【问题描述】:我有一个ObservedObject,我根据来自表单TextFields的用户输入将值传递给它。... 查看详情
更新时绑定到StringVar的Tkinter Label落后一键
...的不同文件名时,Label在我当前单击的任何内容之后单击更改值。我在这里错过了什么?importTkinterastkclassTkTes 查看详情
绑定 Nullable 值时未设置值
...绑定到实现INotifyPropertyChanged的TextBox,在运行时当我更改TextBox的值并失去焦点时。财产的二传手没有击中。:-(有什么想法吗??!顺便说一句,是的BindingMode设 查看详情