2014-09-26 30 views
1

我想將我的Datagridview綁定到SQL數據庫。當我從另一個源(從Visual Stuido中的SQL查詢)更新數據庫時,更改不會顯示在DataGridView或基礎DataTable中。DataTable附加到SQL數據庫與查詢功能不會自動更新

我正在運行我的程序,實際上使用下面的函數填充DataGridView,然後使用Visual Studio中的SQL查詢更改數據庫。 DataGridView不會更新,並且DataTable不會觸發RowChanged事件!

_query = "SELECT * FROM myFunction(0) ORDER BY timestamp DESC"; 
_connection = new SqlConnection("working connection string"); 
_adapter = new SqlDataAdapter(_query, _connection); 
_cmdBuilder = new SqlCommandBuilder(_adapter); 

_table = new DataTable(); 
_table.RowChanged += _table_RowChanged; 

_adapter.Fill(_table); 

_bindingSource = new BindingSource(); 
_bindingSource.DataSource = table; 
_dataGridView.DataSource = _bindingSource; 

// DataGridView is now populated 

// run sql query externally from the program 
// to update one of the rows/columns that the above function will return 

// never updates datagridview and never updates the row in dataTable 

我認爲這個問題與功能有關,適配器是否不斷地查詢數據庫?如果沒有,我可以看到它不能說明它已經更新。

+0

在數據源之後綁定gridview – 2014-09-26 04:15:19

+0

不確定你的意思,DGV綁定到表後的BindingSource。 – janderson 2014-09-26 04:19:36

+0

感謝您的幫助,但是對於windows窗體datagridview沒有DataBind()方法:http://social.msdn.microsoft.com/forums/windows/en-US/2639235d-82ff-4946-ba95-3c0ee117544d/why -there-is-no-databind-method-for-datagridview – janderson 2014-09-26 04:42:33

回答

2

如果我正確地閱讀了這個,你有一個數據綁定DataGridView的DataSource是一個DataTable。你已經用一些SQL以編程方式更改了實際的數據庫表,並期望在DataGridView中看到更新。這不會飛,朋友。在更新實際數據庫之後,您應該刷新數據源,將其轉換爲DataTable並使用與第一次填充時使用的SQL相同的SQL使用SqlDataAdapter重新填充。更新實際的數據庫不會反映在您的數據源中,您必須自己做。

+0

非常感謝您的幫助。我嘗試添加一個「更新」按鈕,只是運行_adapter.Fill(_table);但是這並沒有看到數據庫已經更新了。如果我再次在OP中執行整個代碼塊,它會看到它已經更新。有任何想法嗎? – janderson 2014-09-26 05:07:21

+0

這裏是一個[[示例](http://pastebin.com/E1vp4w7t)]我剛剛編碼起來非常快。現在是午夜之後,我在早上工作。但你應該明白這個主意。這是非常簡單的,設置datagridview的數據源,並通過給它一個新的數據表直接刷新它。實際設置數據源的行可以被提取到單獨的FillData()方法中。查詢可以存儲在字符串var中,而不是硬編碼兩次。真的馬虎,但它的作品。 :P – scottyeatscode 2014-09-26 05:26:47

+0

好吧,我的想法是在後臺工作者上輪詢數據庫,然後發佈對DataTable的任何更改。有沒有一個好的方法來做到這一點?或者比較DataTables以查看它們是否有所不同? – janderson 2014-09-26 06:06:32