我需要更新 WinGrid(WinForms 项目)附近标签上的行数。
网格更新以不同的方式进行 - 数据源更改、手动添加/删除、sql 初始化等。
当 Grid 更改行号(包括数据源更改)时,是否会引发通用事件?
我需要更新 WinGrid(WinForms 项目)附近标签上的行数。
网格更新以不同的方式进行 - 数据源更改、手动添加/删除、sql 初始化等。
当 Grid 更改行号(包括数据源更改)时,是否会引发通用事件?
我假设您正在绑定到具有更改通知的列表,例如 BindingList 或 DataSet/DataTable。如果您将项目添加到数据源并且它们显示在网格中,那么这必须是正确的,因为网格依赖于来自数据源的事件来知道它需要更新。
在这种情况下,您可以绑定到您的网格绑定到的列表的 ListChanged 事件。此事件是IBindingList 接口的一部分。
如果您要绑定到 DataTable/DataSet,那么您将需要使用 DataTable 的 DefaultView 公开的事件,因为这是实现 IBindingList 和网格实际绑定的内容。
如果您使用的是实现 INotifyCollectionChanged 而不是 IBindingList 的集合,那么您将使用 CollectionChanged 事件。如果您正在进行 WPF 开发,这更有可能发生,因为这是 ObservableCollection 用于更改通知的内容。
以我的经验,不,当行数更改时,不会调用全局事件。
我对此的最佳解决方案是一个通用方法,该方法将从可以修改显示行数的各种事件中调用。
像这样的东西
private void UpdateRowsCount(UltraGrid grd, string messageFmt = "Rows count: {0}")
{
labelRowCount.Text = string.Format(messageFmt, grd.Rows.FilteredInRowCount);
}
那么应该处理的事件:
当然,在设置数据源之后。
grd.DataSource = myDataTable;
this.UpdateRowsCount(grd, "Customers count: {0}");
如果有人对这个问题有更好的了解,我会对不同的方法非常感兴趣。
最后,我手动确定了将行添加到网格的位置,并相应地更新了计数标签。
所以,我没有使用 Grid 事件。