web|資料
對 Web Form頁中的各項控制項屬性進行資料繫結不是通過直接將屬性綁定到資料來源來實現的。而是通過使用特殊的運算式格式來實現資料繫結的。與要綁定到的資料有關的資訊被置入該運算式,然後將運算式的結果分配給控制項屬性。
例如,假設您要將 TextBox Web 伺服器控制項綁定到一些資料。您建立資料繫結運算式並將其分配給控制項的 Text 屬性,以便該值將在控制項中顯示。
下面的樣本說明控制項聲明在 HTML 視圖中的大體形式。控制項的 Text 屬性被綁定到包含單個記錄的資料檢視。資料繫結運算式是用字元 <%# 和 %> 分隔的。
<asp:TextBox id="TextBox1" runat="server" Text='<%# DataView1(0)("au_lname") %>'></asp:TextBox>
同樣,可以使用資料繫結運算式來設定 Image Web 伺服器控制項的 ImageUrl 屬性。在這種情況下,您是在從資料庫中提取一個字串,該字串包含要顯示的圖形的路徑和檔案名稱。一個樣本可能類似於如下所示:
<asp:Image id=Image1 runat="server" ImageUrl='<%# DataView(0)("productPhotoURL") %>'>
在 Visual Studio 中,“屬性”視窗向您提供建立資料繫結運算式的工具。您還可以選擇自行建立綁定運算式並在 Web Form設計器的 HTML 視圖中輸入它們。
使用資料繫結運算式的優點
使用資料繫結運算式在以下幾個方面為您提供靈活性:
- 可以使用任何錶達式,只要該運算式解析為控制項可以使用的值。最常見的是,資料繫結運算式將解析為從資料來源匯出的值,但它還可以引用該頁或其他控制項的屬性、您在運行時計算出的值或幾乎任何其他項。
- 可以將運算式分配給任何屬性,也就是說,可以將任何屬性綁定到資料。例如,您可以將與使用者喜好設定有關的資訊保留在資料庫中,並且使用資料繫結為字型、顏色、大小、樣式等實現屬性中的那些喜好設定。此外,可以綁定不止一個控制項屬性,這使您可以將一個屬性綁定到一個資料來源,將另一個屬性綁定到不同的源。
使用 DataBinder 類用於綁定
儘管您可以實際使用解析為一個值的任何錶達式來進行資料繫結,但在大多數情況下,您將綁定到某些類型的資料來源。最為常見的情況是資料集或資料檢視中的表,表中包含您感興趣的單個記錄。為了簡化此類型的資料繫結,ASP.NET 伺服器控制項支援名為 DataBinder 的類,它執行某些提取資料並使其可用於控制項屬性的工作。
可以通過調用其 Eval 方法來使用 DataBinder 類,這要求兩個參數:
- 對資料容器(通常是資料集)、資料表或資料檢視的引用。
- 對要被匯出的單獨的值的引用。這通常引用單行(行零)和該行中的列值。
下面的樣本說明與上面的文字框所執行的相同的資料繫結,但這一次使用 DataBinder 類。
<asp:TextBox id="TextBox1" runat="server" Text='<%# DataBinder.Eval(DataView1, "[0].au_lname") %>'></asp:TextBox>
先前設定 Image 控制項 ImageUrl 屬性的樣本可能類似於如下所示。在該樣本中,一個格式設定運算式在 DataBinder.Eval 方法的第二個參數(可選)中傳遞;該運算式將一個路徑當作首碼添加到資料中。
<asp:Image id=Image1 runat="server" ImageUrl='<%# DataBinder.Eval(Container, "DataItem.ProductImage", "http://myserver/myapps/images/{0}") %>'>
使用 DataBinder 類的優點是:
- 文法對於所有綁定是一致的,由 Eval 方法所需的參數強制採用的。
- Web Form頁的 Visual Studio 設計工具支援 DataBinder 類。
- 類自動執行類型轉換。例如,如果將一個文字框綁定到包含整數的資料列,DataBinder 類自動將整數轉換為字串。
- 您可以選擇指定一個可轉換或修正資料的格式設定運算式。
解析資料繫結運算式
為了提供控制項可以綁定到的值,必須在運行時解析資料繫結運算式。通過調用 DataBind 方法(它是 System.Web.UI.Control 類的方法),可以在頁處理期間顯式執行此步驟。可以為單獨的控制項調用該方法,或者更為有效是,可以為 Page 類(也是從 Control 類匯出的)調用該方法。此方法級聯對所有子控制項的調用,所以通過為該頁調用此方法一次,您可以為該頁上的所有控制項調用它。
通常在以下情況下調用 DataBind 方法:
- 該頁第一次運行時,但在填充資料來源之後(例如,在您已填充資料集之後)。
- 在資料來源發生更改之後(例如,因為已更新了資料來源中的記錄)。
下面的樣本說明在頁初始化事件期間調用 DataBind 方法的典型方式:
' Visual BasicPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SqlDataAdapter1.Fill(DsAuthors1, "authors") If Not (Me.IsPostBack) Then Me.DataBind() End IfEnd Sub// C#private void Page_Load(object sender, System.EventArgs e){ SqlDataAdapter1.Fill(dsAuthors1, "authors"); if (!this.IsPostBack) { this.DataBind(); }}
通常不需要在每個往返過程中都調用 DataBind 方法(即在頁初始化中不需要檢查回傳),因為這樣做會替換控制項中的值。例如,如果您使用 DataGrid 控制項,該控制項可能包含您要處理的更改。在您調用 DataBind 時,用來自資料來源的值代替網格的內容。如果在頁初始化期間執行此操作,您將在有機會處理更改前,失去網格中的更改。您而是應通常在為該事件執行了資料處理後,在事件處理常式中調用 DataBind 方法。