ASP.NET 資料繫結概觀

文章翻譯 文章翻譯
文章編號: 307860 - 檢視此文章適用的產品。
下列的 Microsoft.NET 參考這份文件架構類別庫命名空間:
  • System.Data
  • System.Data.SqlClient
全部展開 | 全部摺疊

在此頁中

結論

本文介紹 ASP.NET 資料繫結。

如需 ASP.NET 概觀,請參閱下列微軟知識庫文件:
305140 ASP.NET 藍圖

其他相關資訊

您可以使用 ASP.NET 資料繫結,繫結任何伺服器控制項若要簡單屬性、 集合、 運算式及/或方法。當您使用資料繫結,您有更大的彈性當您使用資料庫中的資料或其他的方法。

這篇文章說明下列的資料繫結主題:

資料繫結須知

< %# %> 語法

ASP.NET 會引入新的宣告式語法、 < %# %>。這語法是.aspx 網頁中使用資料繫結的基礎。所有的資料繫結運算式必須包含在這些字元。下列清單包含來自於多重來源的簡單資料繫結的範例:
  • 簡單屬性 (客戶語法):
    <%# custID %>
    					
  • 集合 (訂購語法):
    <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
    					
  • 運算式 (連絡人的語法):
    <%# ( customer.First Name + " " + customer.LastName ) %>
    					
  • 方法結果 (未償餘額的語法):
    <%# GetBalance(custID) %>
    					
在上述範例中,內嵌的 < %# %> 標記指出特定的資料來源的資訊放在的位置.aspx 頁面中。下列的資料繫結範例會使用TextBox Web 伺服器控制項:
<asp:textbox id=txt text="<%# custID %>" runat=server />
				
如需有關資料繫結語法的詳細資訊,請參閱下列的.NET架構軟體開發套件 (SDK) 文件:
資料繫結運算式語法
http://msdn2.microsoft.com/en-us/library/bda9bbfx (vs.71).aspx

Page.DataBind() 與 Control.DataBind()

之後的特定資料來源已決定並設定為.aspx 網頁上的物件,您必須將資料繫結至這些資料來源。您可以使用Page.DataBindControl.DataBind方法,將資料繫結至資料來源。

兩者方法的運作方式很類似。主要差異是所有的資料來源繫結以它們的伺服器控制項,在Page.DataBind之後會呼叫方法。沒有資料時,便呈現至控制項上,直到您明確地呼叫哪種資料繫結方法的 Web 伺服器控制項,或直到您叫用頁面層級的Page.DataBind方法。一般來說, Page.DataBind (或資料繫結) 呼叫從Page_Load事件。

如需有關資料繫結方法的詳細資訊,請參閱下列的.NET Framework SDK 文件:Control.DataBind 方法
http://msdn.microsoft.com/en-us/library/w5e5992d.aspx

資料繫結清單控制項

清單控制項是特殊的 Web 伺服器控制項可以繫結至集合。您可以使用這些控制項來顯示資料列中的資料自訂的範本格式。所有清單控制項都公開的資料來源DataMember屬性,它們用來繫結至集合。

這些控制項可以將其 [資料來源] 屬性繫結至任何支援IEnumerableICollectionIListSource介面的集合。

Repeater 控制項

Repeater控制項是樣板化資料繫結的清單。Repeater控制項是"lookless ;"也就是,它並沒有任何內建配置或樣式。因此,您必須明確宣告所有 HTML 配置,格式和樣式標記中控制項的樣板。

下列程式碼範例將示範如何使用一個清單控制項, Repeater控制項,以顯示資料:

附註: 您必須修改連接字串,做為參數若有必要,可為您的環境。

Visual Basic.NET
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

   Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                                "database=pubs;Integrated Security=SSPI")
   Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
   Dim ds As DataSet = New DataSet()
   cmd.Fill(ds)
   Repeater1.DataSource = ds
   Repeater1.DataBind()

End Sub
</script>
<html>
<body>
   <form id="Form1" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
視覺化 C#.NET
<%@ Page language="c#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
   SqlConnection cnn = new 
       SqlConnection("server=(local);database=pubs;Integrated Security=SSPI"); 
   SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
   DataSet ds = new DataSet(); 
   da.Fill(ds, "authors"); 
   Repeater1.DataSource = ds.Tables["authors"];
   Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
    	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual J#.NET
<%@ Page language="VJ#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

 <script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
    SqlConnection cnn = new SqlConnection("server=(local);database=pubs;Integrated
         Security=SSPI"); 
    SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "authors"); 
    DataTableCollection dtc = ds.get_Tables();
    int index = dtc.IndexOf("authors");
    Repeater1.set_DataSource(dtc.get_Item(index));
    Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
             </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
如需有關Repeater控制項的詳細資訊,請參閱下列的.NET Framework SDK 文件:
連發槍 Web 伺服器控制項
http://msdn.microsoft.com/en-us/library/x8f2zez5.aspx

在 dataList 控制項

在 DataList類別是功能豐富、 樣板、 資料繫結清單。您可以修改範本,以自訂此控制項。與Repeater控制項,不同的是DataList支援方向式呈現,而且可以選擇性地呈現在在執行階段的 HTML 表格。

如需有關在 DataList控制項的詳細資訊,請參閱下列的.NET Framework SDK 文件:
資料清單 Web 伺服器控制項
http://msdn.microsoft.com/en-us/library/9cx2f3ks (VS.85).aspx

DataGrid 控制項

DataGrid控制項是一個功能完整、 多個資料行、 資料繫結方格。若要自訂個別資料行中資料格的版面配置,您可以設定為 [範本] 資料行型別,並修改資料行範本。DataGrid控制項可以呈現不使用範本,它可使此控制項適用於報告的案例。資料格也支援選取、 編輯、 刪除、 分頁和排序依資料行和按鈕資料行。

如需有關DataGrid控制項的詳細資訊,請參閱下列的.NET Framework SDK 文件:
DataGrid 的 Web 伺服器控制項
http://msdn.microsoft.com/en-us/library/aa710742 (VS.71).aspx

存取資料

本章節說明如何從資料庫存取資料,將資料繫結清單控制項。若要從資料庫取得資料,您可以使用資料集] 或 [ DataReader類別。

資料集類別

資料集包含資料,包括資料表的完整的表示結構、 資料表和資料的排序作業之間的關聯性。資料集類別都有足夠的彈性,來儲存任何種類的資訊「 可延伸標記語言 (XML) 檔案到資料庫。資料集類別是沒有狀態 ;也就是說,您可以傳遞從這些類別用戶端到伺服器,而不需中斷連線的伺服器資源。下列程式碼會示範如何使用資料集將資料繫結至控制項:

附註: 您必須修改連接字串,做為參數若有必要,可為您的環境。

Visual Basic.NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
MyRepeater.DataSource = ds
MyRepeater.DataBind() 
				
視覺化 C#.NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds);
MyRepeater.DataSource = ds;
MyRepeater.DataBind(); 
				
Visual J#.NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
MyRepeater.set_DataSource(ds);
MyRepeater.DataBind();
				
如需有關資料集類別的詳細資訊,請參閱下列的.NET Framework SDK 文件:
資料集類別
http://msdn2.microsoft.com/en-us/library/system.data.dataset (vs.71).aspx

DataReader 類別

相反地,如果您只需要顯示 (並不會變更) 資料這是要呈現、 DataReader類別可能會更好的解決方案。比方說,最好是使用對於將DropDownListDataReader控制項因為DataReader為順向類型資料的資料指標。下列程式碼示範如何使用SqlDataReader類別來將資料繫結至控制項:

Visual Basic.NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlCommand = New SqlCommand("select * from authors", cnn)

cnn.Open()
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
MyRepeater.DataBind()
				
視覺化 C#.NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
MyRepeater.DataBind();
				
Visual J#.NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 

SqlCommand cmd = new SqlCommand("select * from authors", cnn); 

cnn.Open();
MyRepeater.set_DataSource(cmd.ExecuteReader(CommandBehavior.CloseConnection));
MyRepeater.DataBind();
				
如需有關使用 ASP.NET, SqlDataReader類別和資料存取的詳細資訊,請參閱下列主題.NET Framework SDK 文件:
SqlDataReader 類別
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

開發高效能 ASP.NET 應用程式
http://msdn2.microsoft.com/en-us/library/5dws599a (vs.71).aspx

在清單控制項範本中的繫結

您可以使用範本,並繫結清單控制項中自訂個別資料錄的資料來源。本章節包含三個若要執行這項操作的方法。

DataBinder.Eval 方法

當資料來源會使用傳回的資料資料庫中,資料來源可能包含許多項資訊。您可以您可以使用泛用DataBinder.Eval方法來傳回資料。在下列程式碼範例中,"au_id"欄位是容器物件資料來源所傳回:
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
				
如需有關DataBinder.Eval方法的詳細資訊,請參閱下列的.NET Framework SDK 文件:
DataBinder.Eval 方法
http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

明確轉型

如果您需要更大的控制權,請使用明確轉型。明確轉換會使用型別轉換關鍵字。這些關鍵字做為函式,但是編譯器會產生內嵌程式碼。因此,執行來得稍快非使用函式呼叫。下列程式碼範例會使用明確轉換:

Visual Basic.NET
' DataTable as the DataSource
<%# CType(Container.DataItem, System.Data.DataRowView)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)(0) %>
				
視覺化 C#.NET
// DataTable as the DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Visual J#.NET
// DataTable as the DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
請注意上述範例使用可能是資料表,也就是資料集或做為資料來源的DataReader的子集。

ItemDataBound 事件

您也可以使用控制項的ItemDataBound事件的資料繫結。這個事件發生時項目是資料繫結至控制項。下列的 HTML 程式碼範例會定義與ItemTemplateRepeater控制項:
<asp:repeater id=rptr runat=server>
   <itemtemplate>
      <asp:label id=lblAuthorID runat=server />
   </itemtemplate>
</asp:repeater>
				
在資料頁中需要下列方法:

Visual Basic.NET
public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
  
   'TODO: Retrieve data from a database,
   'and bind the data to a list control.

End Sub

public Sub rptr_OnItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptr.ItemDataBound
   Dim rec As DataRowView
   rec = e.Item.DataItem

   'Make sure that you have the data.
   If Not IsDBNull(rec) Then
      Dim l1 As Label
      l1 = e.Item.FindControl("lblAuthorID")
      l1.Text = rec("au_id").ToString()
   End If
End Sub
				
視覺化 C#.NET
public void Page_Init(object sender, System.EventArgs e)
{
   rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load(object sender, System.EventArgs e)
{
   // TODO: Retrieve data from a database,
   // and bind the data to a list control.
}
public void rptr_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
   System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                          e.Item.DataItem;
   if(rec!=null) //Make sure that you have the data.
   {
      Label l1 = (Label)e.Item.FindControl("lblAuthorID");
      l1.Text = rec["au_id"].ToString();
   }
}
				
Visual J#.NET
public void Page_Init(Object sender, System.EventArgs e)
{
            rptr.add_ItemDataBound(new RepeaterItemEventHandler(rptr_OnItemDataBound));
}
private void Page_Load(Object sender, System.EventArgs e)
{
            // TODO: Retrieve data from a database,
            // and bind the data to a list control.
}
public void rptr_OnItemDataBound(Object sender, RepeaterItemEventArgs e)
{
            System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                                   e.get_Item().get_DataItem();
            if (rec != null) //Make sure that you have the data.
            {
                        Label l1 = (Label)e.get_Item().FindControl("lblAuthorID");
                        l1.set_Text(((rec.get_Item("au_id")).ToString()));
            }
}
				

屬性

文章編號: 307860 - 上次校閱: 2012年10月15日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 標準版
關鍵字:?
kbarttyperoadmap kbdatabinding kbinfo kbservercontrols kbmt KB307860 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:307860
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com