BindingSource.ListChanged事件不会在数据更改时触发 - 它不是应该的吗?

时间:2012-06-12 03:25:09

标签: .net vb.net winforms data-binding devexpress

我试图在数据库中更新基础数据时自动刷新网格。这应该不起作用吗?或者我错过了什么?

我在DataSet中创建了一个DataTable。然后我创建了一个新表单并添加了一个DataGridView(实际上我正在使用DevExpress的XtraGrid,但我试图让它只与Microsoft控件一起工作)。我使用网格左上角的菜单将网格数据源设置为项目数据源中的数据表。然后,这会自动将数据集BindingSource和TableAdapter添加到表单中。

然后,当我添加一个BindingSource.ListChanged事件时,它会在表单加载时触发几次,但不会在任何底层数据发生更改时触发。

当数据库中的数据发生变化时,偶数会引发吗?或者只是在当前VB.NET流程中从其他地方更改数据?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我不确定DevExpress XtraGrid的行为,但是对于大多数数据绑定到列表,ListChanged事件仅在用全新的不同列表替换列表时触发。

如果列表保持不变,但项目已添加到其中,则不会将其视为已更改的列表。通常,您需要放置一些实现INotifyCollectionChanged接口的列表来处理即时添加的项目

答案 1 :(得分:1)

listchanged事件仅在绑定对象更改时触发,而不是在数据库中数据发生更改时触发。

如果使用sqlclient从db检索数据,则可以实现SQL依赖http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

答案 2 :(得分:0)

此事件在基础列表更改或列表中的项更改时发生。数据库更改时没有。

此处您的数据集或DataTable是从数据库中的数据加载的,但加载的数据集在数据库和数据集数据之间没有实时连接。如果需要保存/更新或刷新数据集,则必须调用相关方法来执行该任务。

如果您在显示数据的同一UI中更改数据,请调用网格刷新方法以反映对gridview的更改。