2013-02-25 48 views
0

我有一個DataGridView,它顯示來自SQL table的數據。它使用sqldependency,以便在數據更改時發出警報,並且DataGridView立即顯示更新的數據。新的行將定期添加到此表中,當發生這種情況時,我只想從第一個數據網格獲取新行並填充單獨的DataGridView返回附加行

我已經用RowAdded event進行了一些嘗試,但它並沒有完全簡單,因爲只要網格視圖更新sqldependency,就會爲表中的每一行創建一個警報。

有沒有人有類似的經驗?

+0

歡迎來到計算器!和[你有什麼嘗試](http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – 2013-02-25 05:33:23

+0

你能告訴我們一些關於你在做什麼的代碼嗎? – l46kok 2013-02-25 05:53:25

回答

1

我們稱之爲第一的DataGridView與所有的行電網A並只顯示新行電網B DataGridView的。不要通過觀察對網格A的更改來定義網格B的內容。相反,請創建您自己定義的「新行」。一個簡單的方法是在每次更新期間(在SqlDependency對象的OnChange事件中)複製網格A的內容。然後,在下一次更新時,您將能夠將行選擇到「新行」DataSet中。

這裏的onChange處理您的SqlDependency對象僞代碼(這應該是看填充柵格A的的SqlCommand):

  1. 運行從電網與不選擇行數據源一個SqlCommand IN子句排除第二個表中具有ID的行,稱爲LastUpdate(請參閱步驟2)。這將是網格B的數據源
  2. 運行SqlCommand將網格A數據源的所有行復制到LastUpdate表。這可能是最簡單的只是刪除LASTUPDATE的內容,然後再運行該形式的語句:INSERT INTO LastUpdate(ID) SELECT ID FROM table_x
  3. 更新電網A正常

我想強調的一點是,本次更新的策略創建一個有效數據查詢和UI之間的分離。換句話說,驅動Grid B的數據絕不取決於Grid A.如果你堅持這個原則,你應該結束一個更可維護的應用程序。