擷取 GridView 資料列的欄位值集合
一般要取得 GridView 中的欄位值,都是要指定該欄位值所在的儲存格索引,還要判斷資料列在瀏覽或編輯模式,使用不同的方式在擷取。
例如有一個 ProductName 的 BoundField,它在 GridView 中的欄位索引為 3,則在瀏覽模式要使用下列方式來取得瀏覽時 ProductName 欄位值。
GridViewRow.Cells(3).Text
若是在編輯模式時,因為欄位值是在 Cell 中的 TextBox,所以要使用下列方式來取得編輯時 ProductName 欄位值。
CType(oRow.Cells(3).Controls(0), TextBox).Text
上述擷取 GridView 欄位值的程式碼相當沒有維護性,只要變更欄位序順或變更欄位類型(例如轉成 TemplateField),很容易就讓程式發生錯誤,而且這種錯誤在編譯時期完全無法查覺,只能透過完整測試來發現問題。
為了解決這個問題,比較好的方式是以欄位名稱來取得欄位值。DataControlField 有一個 ExtractValuesFromCell 方法,不論是瀏覽或編輯模式都可以輕易的擷取出 Cell 的欄位值,不用去管它是那一種 DataControlField (BoundField 、 CheckBoxField 或 TemplateField ) 都可以正確的取得欄位值。
下面的 ExtractRowValues 函式就是利用這種方式,擷取出 GridView 指定資料列的欄位值集合。
當 TemplateField 的 Button 的 Click 事件中要取得 ProductName 這個欄位值時,就可以利用下面的方式。