古人說「不管是DataGrid或是GridView,總有一天會遇到 Sort」
坎尼就是一直為這個排序事件苦惱
雖然從 VS 2003 時代 升級上來 VS 2005,DataGrid 也多了個兄弟叫 GridView
可是這個Sort事件一直沒有更簡單的寫法
(不要提 DataSource 那個會讓坎尼變精靈工程師的東西)
看看那個 Paging 事件,人家只要簡單的兩行就可解決
gv.PageIndex = e.NewPageIndex;
gv.DataBind();
坎尼一直天真的認為,Sorting應該也是這麼人性化才對
gv.SortDirection= SortDirection.Ascending;
gv.SortExpression = e.SortExpression;
gv.DataBind();
恩、Exception? gv.SortDirection 及 gv.SortExpression 為 唯讀 (翻桌)
後來坎尼去問了 估狗 大神
看到大家都是在Sorting做完判斷,再丟去另外個函式重新Bind
但是坎尼遇到的情況是,同一個Gridview會有兩種以上的DataSource
所以想出了下面這個方法 (當然部分是參考別人的寫法)
一樣要來解釋一下 (雖然註解都寫的差不多了)
首先,先取得 gv.DataSource 並放到一個 DataView 之中
再來,取得用 ViewState 記錄的 SortDirection 和 SortExpression
接著,再判斷如何排序 (方式請見上圖註解)
最後,利用 DataView.Sort 屬性進行排序,再 Bind 回 Gridview
別忘了把目前的 SortDirection 和 SortExpression 記錄在 ViewState中
好了 排序完成 收功
不過目前這個排序判斷版本仍稍為有點問題
可能要加上更加精確的判斷
只是坎尼目前修別人的bug已經修到腦子裡都是漿糊了
方法各位就請自行補完吧 哈 ^^
補充一點 (剛剛發現的)
圖裡的 gv.DataSource 可以直接用 DataView 來接
是因為坎尼在繫結事件時是寫 gv.DataSource = ds.Table[0].DefaultView;
若是寫成 gv.DataSource = DataSet1; (或是 gv.DataSource = DataTable1;)
此時在程式裡的 gv.DataSource 轉型就要注意
再補充一點
這段code只能用在只排序不分頁的事件中
所以....
並不適用於坎尼的這個case中
啊啊 又要想新的解法了 Orz
訂閱:
張貼留言 (Atom)
Google Spreadsheet 裡用規則運算式
最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D
-
今天坎尼去上課老師講了一題很有趣的題目 所以回到家坎尼就順手試驗了一下 I. XOR (exclusive OR) XOR 是邏輯運算子之一,定義為: 當兩數的值不同才為 true,相同則為 false 其他相關說明可以參考 維基百科:XOR II. 程式 以往的做法會宣...
-
雖然到最後你還是沒留下你的名字... 今天就來介紹一下,如何用程式撰寫多維 矩陣乘法運算 首先要了解一下矩陣乘法的計算方式 (m1 x n1) * (m2 x n2) 結果會是 (m1 x n2)的矩陣 上例中的 n1 = m2 矩陣乘法位置互換結果就會不同 (大家可以直接點上方...
-
今天測試了從 phpMyAdmin 介面將 MySQL DB 中的中文資料匯出成 .csv 檔,原本想說既然中文資料可以正確以 utf-8 編碼存入 MySQL,在 phpMyAdmin 的網頁介面上也可以正常顯示,之前匯出成 .sql 檔也沒有亂碼問題,那匯出 .csv 這種...
沒有留言:
張貼留言