我需要更新WinGrid(WinForms项目)附近标签上的行数。行添加/删除事件? (Infragistics Wingrid)
网格更新以不同的方式制成 - 数据源的变化,手动添加/ removs,SQL initialisations等
是否有一个普遍的事件,当电网发生变化的行数(数据源改变包括)提高呢?
我需要更新WinGrid(WinForms项目)附近标签上的行数。行添加/删除事件? (Infragistics Wingrid)
网格更新以不同的方式制成 - 数据源的变化,手动添加/ removs,SQL initialisations等
是否有一个普遍的事件,当电网发生变化的行数(数据源改变包括)提高呢?
最后,我手动确定将行添加到网格的位置,并更新coresponding计数标签。
所以,我没有使用网格事件。
在我的经验中,没有一个全局事件会在行数发生变化时被调用。
我对此的最佳解决方案是一个通用的方法,它将从可能修改显示行数的各种事件中调用。
像这样的事情
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}");
如果有人对这个问题有更好的认识,我会对其他方法非常感兴趣。
我假设你绑定到一个列表,如BindingList或DataSet/DataTable的更改通知。如果您将项目添加到数据源并且它们显示在网格中,那么这必须是真实的,因为网格依赖来自数据源的事件来知道它需要更新。
在这种情况下,您可以绑定到网格绑定列表的ListChanged事件。此事件是IBindingList interface的一部分。
如果您绑定到DataTable/DataSet,那么您将需要使用DataTable的DefaultView公开的事件,因为这是实现IBindingList和网格实际绑定的内容。
如果您使用的是实现INotifyCollectionChanged而不是IBindingList的集合,那么您将使用CollectionChanged事件。如果您正在进行WPF开发,这将更有可能,因为这是ObservableCollection用于更改通知的内容。
不幸的是,当数据源发生变化时,不会触发“AfterRowInsert”,也无法手动添加行(grid.Rows.Add(...)) – serhio 2013-03-21 10:51:29
Infragistics论坛上有一个关于AfterRowInsert未激活的有趣线程。希望能帮助到你。 http://www.infragistics.com/community/forums/t/8218.aspx – Steve 2013-03-21 11:03:01
如果网格显示来自数据源的更改,那么网格绑定的列表将具有更改通知,您可以使用相关事件。对于实现IBindingList的列表,它是ListChanged事件。我在另一个答案中提供了更多细节。 – alhalama 2013-03-21 17:35:53