【问题标题】:BindingSource.ListChanged Event won't fire when data is changed - isn't it supposed to?数据更改时,BindingSource.ListChanged 事件不会触发 - 不应该吗?
【发布时间】:2012-06-14 22:51:30
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复,但我不完全明白...底层列表和底层数据有什么区别?除了使用计时器或类似的东西之外,没有办法让网格自动刷新吗?
    【解决方案2】:

    listchanged 事件只会在绑定对象发生变化时触发,不会在 db 中的数据发生变化时触发。

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

    【讨论】:

    • 看起来很有趣,但我看到 SQL 依赖被描述为“脆弱”...。希望有一个简单的解决方案 =)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多