2013-03-21 75 views
0

我需要更新WinGrid(WinForms项目)附近标签上的行数。行添加/删除事件? (Infragistics Wingrid)

网格更新以不同的方式制成 - 数据源的变化,手动添加/ removs,SQL initialisations等

是否有一个普遍的事件,当电网发生变化的行数(数据源改变包括)提高呢?

回答

0

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

所以,我没有使用网格事件。

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}"); 

如果有人对这个问题有更好的认识,我会对其他方法非常感兴趣。

+0

不幸的是,当数据源发生变化时,不会触发“AfterRowInsert”,也无法手动添加行(grid.Rows.Add(...)) – serhio 2013-03-21 10:51:29

+0

Infragistics论坛上有一个关于AfterRowInsert未激活的有趣线程。希望能帮助到你。 http://www.infragistics.com/community/forums/t/8218.aspx – Steve 2013-03-21 11:03:01

+0

如果网格显示来自数据源的更改,那么网格绑定的列表将具有更改通知,您可以使用相关事件。对于实现IBindingList的列表,它是ListChanged事件。我在另一个答案中提供了更多细节。 – alhalama 2013-03-21 17:35:53

1

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

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

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

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

+0

这对于过滤操作也是如此? – Steve 2013-03-21 17:38:58

+0

如果您正在使用过滤,那么在这种情况下不会更新,因为数据源不会更改。如果这是一个要求,那么你可以使用ListChanged事件和网格的AfterRowFilterChanged事件,然后调用每个会更新标签的方法 – alhalama 2013-03-21 17:45:07