每個ASP.NET web窗體控制項都從其父控制項類繼承data bind方法,這使其具有將數據綁定到其至少一個屬性的固有功能。這稱爲簡單數據綁定或內聯數據綁定。
簡單的數據綁定涉及將實現IEnumerable接口的任何集合(項集合)或數據集和數據表類附加到控制項的DataSource屬性。
另一方面,一些控制項可以通過數據源控制項將記錄、列表或數據列綁定到其結構中。這些控制項派生自BaseDataBoundControl類。這稱爲聲明性數據綁定。
數據源控制項幫助數據綁定控制項實現排序、分頁和編輯數據集合等功能。
BaseDataBoundControl是一個抽象類,由另外兩個抽象類繼承:
- DataBoundControl
- HierarchicalDataBoundControl
抽象類DataBoundControl再次被另外兩個抽象類繼承:
- ListControl
- CompositeDataBoundControl
能夠簡單數據綁定的控制項是從ListControl抽象類派生的,這些控制項是:
- BulletedList
- CheckBoxList
- DropDownList
- ListBox
- RadioButtonList
能夠聲明性數據綁定(更複雜的數據綁定)的控制項是從抽象類CompositeDataBoundControl派生的。這些控制項包括:
- DetailsView
- FormView
- GridView
- RecordList
Simple Data Binding
簡單的數據綁定涉及只讀選擇列表。這些控制項可以綁定到數組列表或資料庫中的欄位。選擇列表從資料庫或數據源獲取兩個值;一個值由列表顯示,另一個被視爲與顯示相對應的值。
讓我們舉一個小例子來理解這個概念。創建一個帶有項目符號列表和SqlDataSource控制項的網站。將數據源控制項配置爲從資料庫檢索兩個值(我們使用與上一章中相同的DotNetReferences表)。
爲項目符號列表控制項選擇數據源包括:
- Selecting the data source control
- Selecting a field to display, which is called the data field
- Selecting a field for the value
執行應用程式時,請檢查整個標題列是否綁定到項目符號列表並顯示出來。
Declarative Data Binding
在上一個使用GridView控制項的教程中,我們已經使用了聲明性數據綁定。其他能夠以表格方式顯示和操作數據的複合數據綁定控制項是DetailsView、FormView和RecordList控制項。
在下一個教程中,我們將研究處理資料庫的技術,即ADO.NET。
但是,數據綁定涉及以下對象:
存儲從資料庫檢索到的數據的數據集。
數據提供程序,通過在連接上使用命令從資料庫檢索數據。
發出存儲在命令對象中的select語句的數據適配器;它還可以通過發出Insert、Delete和update語句來更新資料庫中的數據。
數據綁定對象之間的關係:
Example
讓我們採取以下步驟:
步驟(1):創建新網站。通過在解決方案資源管理器中右鍵單擊解決方案名稱並從「添加項目」對話框中選擇項目「類」,添加名爲booklist的類。把它命名爲booklist.cs。
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; namespace databinding { public class booklist { protected String bookname; protected String authorname; public booklist(String bname, String aname) { this.bookname = bname; this.authorname = aname; } public String Book { get { return this.bookname; } set { this.bookname = value; } } public String Author { get { return this.authorname; } set { this.authorname = value; } } } }
步驟(2):在頁面上添加四個列表控制項列表框控制項、單選按鈕列表、複選框列表、下拉列表和四個標籤以及這些列表控制項。在「設計」視圖中,頁面應如下所示:
源文件應如下所示:
<form id="form1" runat="server"> <div> <table style="width: 559px"> <tr> <td style="width: 228px; height: 157px;"> <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"> </asp:ListBox> </td> <td style="height: 157px"> <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> </asp:DropDownList> </td> </tr> <tr> <td style="width: 228px; height: 40px;"> <asp:Label ID="lbllistbox" runat="server"></asp:Label> </td> <td style="height: 40px"> <asp:Label ID="lbldrpdown" runat="server"> </asp:Label> </td> </tr> <tr> <td style="width: 228px; height: 21px"> </td> <td style="height: 21px"> </td> </tr> <tr> <td style="width: 228px; height: 21px"> <asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged"> </asp:RadioButtonList> </td> <td style="height: 21px"> <asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged"> </asp:CheckBoxList> </td> </tr> <tr> <td style="width: 228px; height: 21px"> <asp:Label ID="lblrdlist" runat="server"> </asp:Label> </td> <td style="height: 21px"> <asp:Label ID="lblchklist" runat="server"> </asp:Label> </td> </tr> </table> </div> </form>
步驟(3):最後,編寫應用程式的以下代碼隱藏例程:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { IList bklist = createbooklist(); if (!this.IsPostBack) { this.ListBox1.DataSource = bklist; this.ListBox1.DataTextField = "Book"; this.ListBox1.DataValueField = "Author"; this.DropDownList1.DataSource = bklist; this.DropDownList1.DataTextField = "Book"; this.DropDownList1.DataValueField = "Author"; this.RadioButtonList1.DataSource = bklist; this.RadioButtonList1.DataTextField = "Book"; this.RadioButtonList1.DataValueField = "Author"; this.CheckBoxList1.DataSource = bklist; this.CheckBoxList1.DataTextField = "Book"; this.CheckBoxList1.DataValueField = "Author"; this.DataBind(); } } protected IList createbooklist() { ArrayList allbooks = new ArrayList(); booklist bl; bl = new booklist("UNIX CONCEPTS", "SUMITABHA DAS"); allbooks.Add(bl); bl = new booklist("PROGRAMMING IN C", "RICHI KERNIGHAN"); allbooks.Add(bl); bl = new booklist("DATA STRUCTURE", "TANENBAUM"); allbooks.Add(bl); bl = new booklist("NETWORKING CONCEPTS", "FOROUZAN"); allbooks.Add(bl); bl = new booklist("PROGRAMMING IN C++", "B. STROUSTROUP"); allbooks.Add(bl); bl = new booklist("ADVANCED JAVA", "SUMITABHA DAS"); allbooks.Add(bl); return allbooks; } protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { this.lbllistbox.Text = this.ListBox1.SelectedValue; } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { this.lbldrpdown.Text = this.DropDownList1.SelectedValue; } protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) { this.lblrdlist.Text = this.RadioButtonList1.SelectedValue; } protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) { this.lblchklist.Text = this.CheckBoxList1.SelectedValue; } }
注意以下事項:
booklist類有兩個屬性:bookname和authorname。
createbooklist方法是一個用戶定義的方法,它創建一個名爲allbooks的booklist對象數組。
頁面加載事件處理程序可確保創建書籍列表。列表是IList類型,它實現IEnumerable接口,並能夠綁定到列表控制項。頁面加載事件處理程序將IList對象「bklist」與列表控制項綁定。將顯示bookname屬性,並將authorname屬性視爲值。
當頁面運行時,如果用戶選擇一本書,則其名稱由列表控制項選擇並顯示,而相應的標籤則顯示作者名稱,這是列表控制項所選索引的相應值。