更新Datatable和DatagridView与数据库由定时器更改
问题描述:
方案:我有一个数据库表,由某些服务经常更新。更新Datatable和DatagridView与数据库由定时器更改
我有ac#Winforms应用程序通过绑定数据表作为数据源,然后我想添加一个Timer,每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();
}
但每次计时器滴答我失去的DataGridView和当前行选择....
有没有更好的解决办法?
答
在更新数据网格之前,您需要存储您感兴趣的所有当前选择,然后在新数据绑定完成后将其恢复。
CurrentRow,你可以从BindingContext中获得。例如
int lastRow = BindingContext[dsProva.Tables["table"]].Position;
然后重新绑定DGV
BindingContext[dsProva.Tables["table"]].Position = lastRow
当然,这只能保证当前行是否指向同一行的索引,而如果你的数据已经足够改变后恢复当前行可能与之前的数据行不同。
如果您想要选择相同的行数据,您可以使用该行的键并遍历数据,一旦找到与先前选择相匹配的行的索引,就可以设置绑定上下文指向该索引。