首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BindingSource.ListChanged事件不会在数据更改时触发-它不是应该触发的吗?

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

Stack Overflow用户
提问于 2012-06-12 11:25:09
回答 3查看 2.4K关注 0票数 0

当数据库中的底层数据更新时,我正在尝试让我的网格自动刷新。这不是应该起作用的吗?还是我错过了什么?

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

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

当数据库中的数据发生变化时,是否应该触发even?或者仅当数据从当前VB.NET进程中的其他位置更改时才会出现这种情况?

谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-12 11:42:50

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 11:38:55

我不确定DevExpress XtraGrid的行为,但对于大多数绑定到列表的数据,只有当列表被替换为一个全新的不同列表时,才会触发ListChanged事件。

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 11:37:23

当基础列表更改或列表中的项更改时,会发生此事件。当db更改时不会。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10990173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档