gpt4 book ai didi

c# - 检测对 BindingSource/BindingList 的更改

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:08 25 4
gpt4 key购买 nike

我正在编写一个选项卡式 WinForms 应用程序,其中包含多个绑定(bind)到 BindingSources 的 DataGridView 控件。 BindingSources 又绑定(bind)到业务对象的 BindingLists。我的业务对象实现 INotifyPropertyChanged。

我的 TabControl 有三个 TabPages(A、B 和 C)。如果我的用户更改了选项卡 A 上的 DataGridView 控件中的数据,然后尝试在不提交更改的情况下切换到选项卡 B 或 C(在这种情况下,将数据写入磁盘),我需要提示他们保存改变或丢失它们。

为了确定给定选项卡上是否进行了更改,我为每个选项卡创建了“pendingChange”变量。每个 DataGridView 控件都有自己的 CellValidating 事件处理程序,我会在用户进行更改时在其中验证数据。在该事件处理程序结束时,如果更改已通过所有验证检查,我将该选项卡的 pendingChange 变量设置为 true。当我的用户单击按钮将更改写回磁盘时,我重置了 pendingChange 变量。因此,每当我的用户尝试更改为不同的选项卡时,我都会检查此变量以确定是否有任何更改需要先保存。

现在我意识到此设计的一个大缺陷是每次单元格失去焦点时都会触发 DataGridView 控件的 CellValidating 事件。所以现在我需要找到一种不同的方法来跟踪单元格值何时被更改。 DataGridView 控件公开的另一个事件是否更适合此目的?或者 BindingList 有一个事件可以帮助我实现此功能?如果必须,我可以向我的业务对象添加一个 bool 值“已修改”属性,并根据需要更新它。如果可以避免这种情况,我想这样做,因为其中一个 BindingList 在任何给定时间都包含 150,000 个对象,并且遍历它可能不会非常快。

最佳答案

BindingSource 有 Events .例如。 CurrentChanged当当前绑定(bind)的项目改变时发生事件。

关于c# - 检测对 BindingSource/BindingList 的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15255634/

25 4 0