但是到了 C# 好像就沒有這招可以用了耶?
先說說書籤的用途好了,
簡單的說就是先記錄下來目前這筆 row 的位置,
然後等等可以快速地回到這筆 row 來!
聽起來很簡單吧!
是呀!但是我就是沒找到有 bookmark 的屬性或是函數,
也沒有看到疑似 bookmark 的屬性或是函數咧?
所以決定試一下看看!
然後就寫出了下面的東東:
- DataRow bookmark = CurrentRow;
- grid.BeginUpdate();
- try
- {
- foreach (DataRow dr in dataTable.Rows)
- {
- CurrentRow = dr;
- DoBringSQL();
- }
- }
- finally
- {
- CurrentRow = bookmark;
- grid.EndUpdate();
- }
首先呢?就是把目前的 row 塞到變數裡面去啦!
(1)DataRow bookmark = CurrentRow;
CurrentRow 可以用 ((DataRowView)BindingSource.Current).row 取得。
(2)grid.BeginUpdate();
設定 gird.BeginUpdate() 的主要用意就是為了不讓 grid 的 cursor 跟著下面的 foreach 移動,
有點類似鎖定住UI的意思,而這樣的效能也會比較好,因為不用花時間來畫畫面了!
在微軟的【ComboBox.BeginUpdate 方法 】說明如下:
在一次加入一個項目至 ComboBox 時維持效能。
這個方法可防止控制項繪製,直到呼叫 EndUpdate 方法為止。
而我這邊的 grid 是【DevExpress.XtraGrid.GridControl】,道理是一樣的。
接下來的 foreach 就處理我要做的事情啦!
最後的 finally 再把 bookmark 塞回 CurrentRow 去,
然後解除 grid 的 UI 鎖定!
(13)CurrentRow = bookmark;
(14)grid.EndUpdate();
至於 bookmark 塞回去 CurrentRow 怎麼處理呢?
簡單的說就是類似下面的處理方式:
int idx = dataTable.Rows.IndexOf(bookmark);
bindingSource.Position = idx;
處理完畢!over!
沒有留言:
張貼留言