此處需要下面的命名空間:
- System.Data
- System.Data.SqlClient
使用ASP.NET資料繫結,可以將任何伺服器控制項綁定到簡單的屬性、集合、運算式、方法。
此篇的主要內容:
- <%#…%>文法
- Page.DataBind與Control.DataBind
- 資料繫結列表控制項
- Repeater
- DataList
- DataGrid
- 訪問資料
- 清單控制項模板中的綁定
- DataBinder.Eval方法
- 顯示轉換
- ItemDataBound事件
<%#…%>文法
它是 在Web頁面中 使用資料繫結的基礎。
所有資料繫結運算式都必須包含在這些字元中。
可以從多個源進行簡單資料繫結。
<%# custId %>
<asp:ListBox id="List1" datasource="<%# myArray %>" runat="server"/>
<%# (customer.FirstName + “ “ + customer.LastName) %>
<%# GetBalance(custId) %>
<%#…%>內聯標記 用於 指示 將要把特定資料來源中的資訊 放在 Web頁面的 什麼位置。
Page.DataBind與Control.DataBind
在為web頁上的“對象”確定並設定 特定資料來源 後,必須將資料繫結到這些資料來源。
這兩種方法的使用方法很相似。主要差別在於:
調用Page.DataBind方法之後,所有資料來源都將綁定到他們的伺服器控制項。通常,可以從Page_Load事件調用Page.DataBind(或DataBind)。
注意:在顯示調用Web伺服器控制項的DataBind方法 或 在調用頁面級的Page.DataBind方法之前,不會有任何資料呈現給控制項。
資料繫結列表 控制項
清單控制項是可以綁定到集合的Web伺服器控制項。可以使用這些控制項以自訂的模板格式顯示資料行。
所有的清單控制項 都有DataSource、DataMember公開屬性,用於綁定到集合。
這些控制項可以將其DataSource屬性綁定到 實現了IEnumerable、ICollection、IListSource介面的任一集合。
Repeater控制項
它是 模板化 的資料繫結列表。
Repeater是“無外觀的”(即,它不具有任何內建布局或樣式)因此,必須在控制項的模板中明確聲明所有HTML布局標記、格式標記和樣式標記。
清單控制項模板中的綁定
可以使用清單控制項中的模板來 綁定 和 自訂資料來源 的各個記錄。
下面介紹三種可用於 執行此操作的方法
DataBinder.Eval方法
當 資料來源 處理 從資料庫返回的資料 時,它 可能包含 很多份 資訊。
可以 使用通用的 DataBinder.Eval方法 返回資料
<%# DataBinder.Eval(Container.DataItem,"au_id") %> <%—- “au_id”欄位是從
容器物件的資料來源中返回的
--%>
顯示轉換
如果需要更多控制項,可以使用顯示轉換。
顯示轉換 使用 類型轉換關鍵字。(這些 關鍵字 充當 函數,由 編譯器 產生 內聯代碼)
<%@ Page Language="VB" %>
<%@ Import Namespace="system.data" %>
<%@ Import Namespace="system.data.sqlclient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim conn As New SqlConnection("data source=.;initial catalog=pubs;user=sa;pwd=123")
Dim da As New SqlDataAdapter("select * from authors", conn)
Dim ds As New DataSet
da.Fill(ds)
Dim ds2 As New DataSet
da.Fill(ds2)
Dim ds3 As New DataSet
da.Fill(ds3)
'
r1.DataSource = ds
r2.DataSource = ds2
r3.DataSource = ds3
'
Page.DataBind()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="r1" runat="server">
<%--使用DataTable做資料來源 --%>
<ItemTemplate> <%#CType(Container.DataItem, DataRowView)("au_id")%> <br /></ItemTemplate>
</asp:Repeater>
<hr />
<asp:Repeater ID="r2" runat="server">
<%-- 使用DataReader做資料來源 --%>
<%-- <ItemTemplate><%#CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_lname")%></ItemTemplate>
--%>
</asp:Repeater>
<asp:Repeater ID="r3" runat="server">
<ItemTemplate>
<%#CType(Container.DataItem, DataRowView)(0)%><br />
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
ItemDataBound事件
可以使用控制項的ItemDataBound事件 來 綁定資料。
當 將某個項目的資料 綁定到 控制項 時,就會發生此事件。
<%@ Page Language="VB" %>
<%-- 加入命名空間 --%>
<%@ Import Namespace=system.data %>
<%@ Import Namespace=system.data.sqlclient %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
'取得 資料 並 綁定到控制項上
Dim conn As New SqlConnection("data source=.;initial catalog=pubs;user=sa;pwd=123")
Dim da As New SqlDataAdapter("select * from authors", conn)
Dim ds As New DataSet
da.Fill(ds)
rptr.DataSource = ds
rptr.DataBind()
End Sub
Protected Sub rptr_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs)
'資料儲存在 e.Item.DataItem中,類型是DataRowView
Dim rec As DataRowView
rec = e.Item.DataItem
'取出資料,放在繫結控制項中
If Not IsDBNull(rec) Then
Dim l1 As Label
l1 = e.Item.FindControl("lblAuthorId")
l1.Text = rec("au_id").ToString
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%--第一步先加入控制項--%>
<asp:Repeater ID=rptr runat=server OnItemDataBound="rptr_ItemDataBound">
<ItemTemplate>
<asp:Label ID=lblAuthorId runat=server></asp:Label><br />
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>