ASP.NET - 資料繫結



每個 ASP.NET 網頁表單控制元件都從其父級 Control 類繼承 DataBind 方法,這使其具有將資料繫結到其至少一個屬性的固有能力。這稱為簡單資料繫結內聯資料繫結

簡單資料繫結涉及將任何實現 IEnumerable 介面的集合(項集合)或 DataSet 和 DataTable 類附加到控制元件的 DataSource 屬性。

另一方面,某些控制元件可以透過 DataSource 控制元件將其結構中的記錄、列表或資料列繫結在一起。這些控制元件派生自 BaseDataBoundControl 類。這稱為宣告性資料繫結

資料來源控制元件幫助資料繫結控制元件實現諸如排序、分頁和編輯資料集合等功能。

BaseDataBoundControl 是一個抽象類,它由另外兩個抽象類繼承

  • DataBoundControl
  • HierarchicalDataBoundControl

抽象類 DataBoundControl 又被另外兩個抽象類繼承

  • ListControl
  • CompositeDataBoundControl

能夠進行簡單資料繫結的控制元件派生自 ListControl 抽象類,這些控制元件是

  • BulletedList
  • CheckBoxList
  • DropDownList
  • ListBox
  • RadioButtonList

能夠進行宣告性資料繫結(更復雜的資料繫結)的控制元件派生自 CompositeDataBoundControl 抽象類。這些控制元件是

  • DetailsView
  • FormView
  • GridView
  • RecordList

簡單資料繫結

簡單資料繫結涉及只讀選擇列表。這些控制元件可以繫結到陣列列表或資料庫中的欄位。選擇列表從資料庫或資料來源獲取兩個值;一個值由列表顯示,另一個值被視為對應於顯示的值。

讓我們舉一個小例子來理解這個概念。建立一個包含專案符號列表和 SqlDataSource 控制元件的網站。配置資料來源控制元件以從您的資料庫中檢索兩個值(我們使用與上一章相同的 DotNetReferences 表)。

為專案符號列表控制元件選擇資料來源涉及

  • 選擇資料來源控制元件
  • 選擇要顯示的欄位,稱為資料欄位
  • 選擇值的欄位
Choose Data Source

應用程式執行後,檢查整個標題列是否繫結到專案符號列表並顯示。

Choose Data Source2

宣告性資料繫結

我們之前在使用 GridView 控制元件的教程中已經使用了宣告性資料繫結。其他能夠以表格方式顯示和操作資料的複合資料繫結控制元件是 DetailsView、FormView 和 RecordList 控制元件。

在下一個教程中,我們將瞭解用於處理資料庫的技術,即 ADO.NET。

但是,資料繫結涉及以下物件

  • 儲存從資料庫檢索到的資料的 DataSet。

  • 資料提供程式,它透過使用連線上的命令從資料庫檢索資料。

  • 資料介面卡,它發出儲存在命令物件中的 select 語句;它還能夠透過發出 Insert、Delete 和 Update 語句來更新資料庫中的資料。

資料繫結物件之間的關係

Declarative Data Binding

示例

讓我們採取以下步驟

步驟 (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):在頁面上新增四個列表控制元件,一個列表框控制元件、一個單選按鈕列表、一個複選框列表和一個下拉列表,以及這些列表控制元件旁邊的四個標籤。頁面在設計檢視中應如下所示

List box control

原始檔應如下所示

<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 物件陣列。

  • Page_Load 事件處理程式確保建立書籍列表。該列表為 IList 型別,它實現了 IEnumerable 介面,並且能夠繫結到列表控制元件。頁面載入事件處理程式將 IList 物件“bklist”與列表控制元件繫結。bookname 屬性將被顯示,authorname 屬性被視為值。

  • 當頁面執行時,如果使用者選擇一本書,其名稱將被選擇並由列表控制元件顯示,而相應的標籤將顯示作者名稱,該名稱是列表控制元件所選索引的對應值。

Data Binding Results
廣告