1. 程式人生 > >GridView控制元件RowDataBound事件中獲取列欄位的幾種方法

GridView控制元件RowDataBound事件中獲取列欄位的幾種方法

GridView是ASP.NET中功能強大的資料顯示控制元件,它的RowDataBound事件為我們提供了方便的控制行、列資料的途徑。 軟體開發網 www.mscto.com

要獲取當前行的某個資料列,有如下幾種方法:

1. Cells[x].Txt。
    從列單元格的文字值獲取。這種方法簡單高率,最為常用,但是功能單純。此法存在幾個缺點:
    (1)無法獲取到設定了隱藏屬性的資料列的值,所取到的值為“”(空)。
    (2)只能獲取在HTML中定義過的資料列,無法查詢資料來源中的當前資料行的所有欄位列。一般情況下,通過HTML設定GridView的欄位列的數量往往小於資料來源的實際欄位數量,這是因為從業務邏輯的角度看,並不是所有的欄位都是要顯示在頁面上的。當需要使用沒有被顯示的欄位時,此法就不能直接滿足需求了。

2. e.Row.Cells[x].FindControl("YourcontrolName")。
    這是在單元格內查詢某個伺服器控制元件,從而獲得其資料值。這種方式可以操作單元格內的伺服器控制元件。此法一般用於處理模板列中的資料或控制元件。

3. (DataRowView)e.Row.DataItem).Row.ItemArray[x].ToString()。
    此法的核心是e.Row.DataItem,它是GridView的行資料集,為Object型別,將其轉化為DataRowView型別後,可以獲得更多的操作方法。此資料集表示資料來源當前行的全部欄位列,ItemArray[x]是當前行全部欄位列的陣列物件,可以通過索引x獲得任意欄位值。此法的強悍之處是可以對資料來源的全部欄位查詢。

4. DataBinder.Eval(e.Row.DataItem, "YourDataFieldName").ToString()。
    此法仍然基於e.Row.DataItem,其特點是更快捷的獲得資料來源的任意欄位值,因為使用了DataBinder.Eval(),需要注意的是不要寫錯欄位名稱。 軟體開發網 www.mscto.com

5. 將e.Row.DataItem轉化為自定義型別,實現資料型別化。
    例如:
    DSRequestTracking.TB_RequestTrackingRow rtrow=(DSRequestTracking.TB_RequestTrackingRow)((DataRowView)e.Row.DataItem).Row;
    RequestStatusDropDownList1.SelectedValue = rtrow.StatusID.ToString();
    其中DSRequestTracking是通過DSRequestTracking.xsd檔案在工程中自定義的強型別DataSet, TB_RequestTrackingRow是VS自動為此強型別生成的建立資料行物件的方法。通過此法,實現了型別化資料的廣泛應用。資料型別化的好處很多,顯而易見的便是傳一個型別資料給方法,取代一大堆引數,另外就是再也不會發生欄位名拼寫錯誤的情況。