0

我试图让我的网格在数据库中更新基础数据时自动刷新。这不应该工作吗?还是我错过了什么?

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

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

当数据库中的数据发生变化时,甚至应该触发吗?还是仅当数据从当前 VB.NET 进程中的其他位置更改时?

谢谢你的帮助!

4

3 回答 3

1

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

如果列表保持不变,但添加了项目,则它不算作更改列表。通常,您需要放置一些列表,其中实现INotifyCollectionChanged接口以处理动态添加的项目

于 2012-06-12T03:38:55.203 回答
1

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

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

于 2012-06-12T03:42:49.827 回答
0

此事件在基础列表更改或列表中的项目更改时发生。不是当 db 改变时。

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

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

于 2012-06-12T03:37:23.123 回答