值更改时绑定到 BindingList 的 DataGridView 不刷新

     2023-02-23     270

关键词:

【中文标题】值更改时绑定到 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设 查看详情