古人說「不管是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. 程式 以往的做法會宣...
-
好久沒開 Chart Control 議題了 剛好前陣子 Codeplex 出現可以輕鬆建立 Excel 檔案的 Library- NPOI 於是坎尼想說研究一下,看能不能把 Chart Control 匯出圖片到 Excel 中 沒想到只花了不到1小時就研究...
-
上個週末打開一個影片檔,發現字幕檔是中英文混合的,造成字幕吃掉畫面很大的空間, 打開字幕檔一看,果然每一段時間都有先英文後中文的字幕: 因此我想要自己作成「只有中文」&「只有英文」兩個字幕檔,但這個檔案有6418 行,如果要手動一行一行的刪除...
沒有留言:
張貼留言