0

我需要更新 WinGrid(WinForms 项目)附近标签上的行数。

网格更新以不同的方式进行 - 数据源更改、手动添加/删除、sql 初始化等。

当 Grid 更改行号(包括数据源更改)时,是否会引发通用事件?

4

3 回答 3

2

我假设您正在绑定到具有更改通知的列表,例如 BindingList 或 DataSet/DataTable。如果您将项目添加到数据源并且它们显示在网格中,那么这必须是正确的,因为网格依赖于来自数据源的事件来知道它需要更新。

在这种情况下,您可以绑定到您的网格绑定到的列表的 ListChanged 事件。此事件是IBindingList 接口的一部分。

如果您要绑定到 DataTable/DataSet,那么您将需要使用 DataTable 的 DefaultView 公开的事件,因为这是实现 IBindingList 和网格实际绑定的内容。

如果您使用的是实现 INotifyCollectionChanged 而不是 IBindingList 的集合,那么您将使用 CollectionChanged 事件。如果您正在进行 WPF 开发,这更有可能发生,因为这是 ObservableCollection 用于更改通知的内容。

于 2013-03-21T17:34:20.373 回答
0

以我的经验,不,当行数更改时,不会调用全局事件。
我对此的最佳解决方案是一个通用方法,该方法将从可以修改显示行数的各种事件中调用。

像这样的东西

private void UpdateRowsCount(UltraGrid grd, string messageFmt = "Rows count: {0}")
{
    labelRowCount.Text = string.Format(messageFmt, grd.Rows.FilteredInRowCount);
}

那么应该处理的事件:

  • grd_AfterRowFilterChanged // 如果您启用了过滤,请不要忘记这一点
  • grd_AfterRowsDeleted
  • grd_AfterRowInsert

当然,在设置数据源之后。

 grd.DataSource = myDataTable;
 this.UpdateRowsCount(grd, "Customers count: {0}");

如果有人对这个问题有更好的了解,我会对不同的方法非常感兴趣。

于 2013-03-21T10:44:32.603 回答
0

最后,我手动确定了将行添加到网格的位置,并相应地更新了计数标签。

所以,我没有使用 Grid 事件。

于 2013-03-27T14:47:05.277 回答