2009年3月23日

DataSource 好好玩

今天坎尼突然發現 WebControl 中常見的 DataSource 屬性是 object
於是想說除了 DataView 以外,是否還支援其他類型?

首先來看一下 DataSource 始祖 BaseDataBoundControl.DataSource 定義
「設定 DataSource 屬性後,會呼叫 ValidateDataSource 方法。此外,如果資料繫結控制項已初始化,則會呼叫 OnDataPropertyChanged 方法,將 RequiresDataBinding 屬性設定為 true。」

似乎沒講到 object 可支援的類型
再來看一下上述的句子中所提到的 ValidateDataSource 定義
「要驗證的物件。通常是 IEnumerableIListSourceIDataSourceIHierarchicalDatasource 的執行個體。」

這邊很明確的指出 DataSource 應該會支援以上四種泛型資料

ok~實驗開始

先在畫面上放個擁有 DataSource 屬性的 WebControl (這邊是放ListBox)
再放上兩個觸發事件的 Button

第一個 Button 事件,寫下呼叫 System.IO.Directory.GetFiles 方法
製造一個 String Array,再將 Array 傳給 ListBox1.DataSource
第二個 Button 事件則是傳入一個字串給 ListBox1

DataSource 來源為 String Array,恩~可以做 DataBind

但當來源為字串時,非但沒有出錯
還將 hello world 切成 array來顯示!!! (據測試,應為 CharArray )

看來 .NET 會自動的將字串轉為 CharArray 再進行 DataBind 的動作
坎尼再用 Gridview 來看一下繫結的欄位是啥~ 疑~ Item?

可是當坎尼自己建立個欄位,並將 DataField 設為 Item 時
此時反倒是出現錯誤:「找不到欄位 Item」(還真是令人搞不懂

不過坎尼此時也發覺到,雖然 DataSource 有這些特性
平常 Coding 用到的機率少之又少,於是就此打住

會用到的作法大概就是列出清單之類的 (如範例中的檔案清單

沒有留言:

Google Spreadsheet 裡用規則運算式

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