2008年8月30日

DataView排序有趣的現象

坎尼無意間發現這個很神奇的東西

大家都知道 當 DataView 要排序時 要給予 .Sort 屬性
不過 大家知道給予 .Sort 屬性時 DataView 裡的資料會怎樣變化嗎?
「不就是排序過的資料?!」對啊 坎尼也是這麼認為
但在 vs2005 + .net 2.0 的環境下測試 咦? 似乎不是?!
來看一下測試的抓圖

坎尼在取得資料的部分 加上兩個中斷點 (其他相關程式碼 請見 這裡 )

然後在 CustomerID 排序為 Desc 時 進入中斷點
下圖為排序前 可以看到 Visualizer 裡的資料的確是未排序
按下 F5 到下一個中斷點

先確認一下目前的排序 的確是 customerId Desc

再來看一下DataView裡的資料

呃 怎麼會是排序前的資料呢 (抓頭
但是畫面上卻又是排序過的資料


但當前幾天坎尼準備寫 blog 時
卻發現這個現象不見了 當場嚇出了一天份的尿
難不成...這飄月連程式也會跟著飄嗎??! (見下面抓圖)

排序前的資料...恩 一樣

也的確是 customerId Desc

!!?
出現了 排序後的資料


好啦 一般靈異現象都會有的解答時間到了 XD
不知各位有沒有發現 其實圖中的某些東西不太一樣???
相信大家看到這 會把頁面再捲上去 仔細的看程式碼

「不是一樣嗎?」
沒錯 程式碼當然一樣 (被鐵槌打飛

重點是....環境不一樣
前半段的抓圖是 vs 2005 + .net 2.0
後半段是 vs 2008 + .net 3.5

所以坎尼試想了兩種可能性

第一種
.net 2.0 中 DataView 資料其實未排序
只是在容器(GridView)要顯示資料時,會讀取 Sort 屬性是否有值
然後要在顯示時 再由容器去排序

第二種
單純的是 Visualizer 的 bug ,它只是忘了去看 Sort 屬性是否有值

就在剛剛 坎尼突然想到 若是 vs2008 + .net 2.0 呢?
於是又開了個新專案 Target 指向 .Net Framework 2.0
程式碼複製過來 再按下 F5
想知道結果嗎? 下次再告訴... (被踢了一腳

好啦 結果會和後半段的測試一樣 Visualizer 看到的資料會是排序過
所以坎尼是偏向後者的推論 可能是 Visualizer 當初設計時的 bug
不過這些都要問 MS 的開發 Team

飄月過了 飄程式也要少出現啊 哈哈

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D