2010-05-01 154 views
0

方案:我有一個數據庫表,由某些服務經常更新。更新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和當前行選擇....

有沒有更好的解決辦法?

回答

0

在更新數據網格之前,您需要存儲您感興趣的所有當前選擇,然後在新數據綁定完成後將其恢復。

CurrentRow,你可以從BindingContext中獲得。例如

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

然後重新綁定DGV

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

當然,這隻能保證當前行是否指向同一行的索引,而如果你的數據已經足夠改變後恢復當前行可能與之前的數據行不同。

如果您想要選擇相同的行數據,您可以使用該行的鍵並遍歷數據,一旦找到與先前選擇相匹配的行的索引,就可以設置綁定上下文指向該索引。

相關問題