【问题标题】:Update Datatable and DatagridView with database Changes by Timer使用 Timer 的数据库更改更新 Datatable 和 DatagridView
【发布时间】:2010-05-01 09:09:36
【问题描述】:

场景:我有一个数据库表被某些服务频繁更新。

我有一个 c# Winforms 应用程序,它通过将数据表绑定为数据源将这个表加载到数据网格视图中,然后我想添加一个计时器,它每 10 秒更新一次数据表的内容,并使用数据库表中的最后一次更改。 ..

我不需要用数据表更改来更新数据库,但我需要用数据库表中的最后一次更改来更新数据表,这与通常情况相反......

有没有办法做到这一点?最好的方法是什么?

我已经尝试过使用此代码:

private void ServiceTimer_Tick(object state)
{
    OdbcConnection oCon = new OdbcConnection();
    oCon.ConnectionString = ConnectionStrings;
    OdbcDataAdapter dp = new OdbcDataAdapter("SELECT * FROM table", oCon);
    dsProva.Tables.Clear();
    dp.Fill(dsProva,"table");

    dataGridViewMessaggi.DataSource = dsProva.Tables["table"];
    dataGridViewMessaggi.Refresh();
}

但是每次 Timer Tick 我都丢失了 DatagridView 和 Current Row 中的选择......

有没有更好的解决方案?

【问题讨论】:

    标签: c#


    【解决方案1】:

    在更新数据网格之前,您需要存储您感兴趣的所有当前选择,然后在新的数据绑定完成后恢复它们。

    CurrentRow,可以从BindingContext中获取。例如

    int lastRow = BindingContext[dsProva.Tables["table"]].Position;
    

    然后重新绑定DGV后恢复当前行

    BindingContext[dsProva.Tables["table"]].Position = lastRow
    

    当然,这只会确保当前行指向相同的行索引,如果您的数据发生了足够的变化,则可能与以前的数据行不同。

    如果您想选择相同的行数据,您可以使用行的键并循环遍历数据,一旦找到与先前选择匹配的行的索引,您就可以设置绑定上下文到那个索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2021-12-11
      • 2011-09-13
      • 2013-02-22
      • 2017-01-28
      相关资源
      最近更新 更多