ASP.NET – 數據綁定
每一個 ASP.NET 網頁表單控件從它的父控件類繼承了 DataBind 方法,它給予了它繼承的能力來綁定數據到它屬性中的至少一個屬性。這就是所謂的簡單數據綁定或者內部數據綁定。
簡單數據綁定包括將任何實現 IEnumerable 接口的集合(項目集合),或者 DataSet 和 DataTable 類附加到控件的 DataSource 屬性。
另一方面,一些控件可以通過 DataSource 控件綁定記錄,列表,或者數據列到它們的結構中。這些控件源自 BaseDataBoundControl 類。這被叫做描述性數據綁定。
data source 控件幫助 data-bound 控件實現了比如排序,分頁和編輯數據集合的功能。
BaseDataBoundControl 是一個抽象類,它通過兩個抽象類繼承:
- DataBoundControl
- HierarchicalDataBoundControl
抽象類 DataBoundControl 也由兩個抽象類繼承:
- ListControl
- CompositeDataBoundControl
能夠簡單綁定數據的控件源自 ListControl 抽象類并且這些控件是:
- BulletedList
- CheckBoxList
- DropDownList
- ListBox
- RadioButtonList
能夠描述性數據綁定的控件(一個更復雜的數據綁定)源自抽象類 CompositeDataBoundControl。這是控件是:
- DetailsView
- FormView
- GridView
- RecordList
簡單數據綁定
簡單數據綁定包括只讀選擇列表。這些控件能綁定一個數組列或者數據庫的字段。選擇列表從數據庫中或 data source 中取兩個值;一個值用過列表表示而另一個被認為是相應顯示的值。
讓我們使用一個小例子來理解這個概念。用一個項目符號列表和一個 SqlDataSource 控件來創建一個網頁。配置 data source 控件來從你的數據庫中(我們在之前的章節中使用相同的 DotNetReferences 表)檢索兩個值。
為包含的項目符號列表控件選擇一個 data source:
- 選擇 data source 控件
- 選擇一個字段來展示,它被叫做數據字段
- 選擇值的字段

在下一個指南中,我們將研究解決數據庫,i.e,ADO.NET 的 技術。
但是,數據綁定包括以下對象:
- 存儲從數據庫檢索數據的數據集。
- 數據提供者,它通過使用一個連接的命令從數據庫中檢索數據。
- 發出存儲在 command 對象中的選擇語句的數據適配器;它也能通過發出 Insert,Delete,和 Updata 語句來更新數據庫中的數據。
data bonding 對象間的關系:
步驟(2):在頁面上添加四個列表控件,一個 list box 控件,一個 radio button 控件,一個 check box 控件和一個 drop down list 和四個與這些列表控件一起的四個表單。在設計視圖中頁面應該看起來像這樣:
步驟(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 方法是一個用戶定義的可以創建名為 allboods 的 booklist 類的數組的方法。
- Page_Load 事件句柄確保了 books 的列表被創建。該列表是 IList 型的,它實現了 IEnumerable 接口并能和列表控件綁定。Page load 時間句柄用控件綁定了 IList 對象bklist。bookname 屬性被展示并且 authorname 屬性被視為這個值。
- 當頁面運行時,如果用戶選擇了一本書,則它的名字被選擇并且通過 list 控件被顯示出來,而相應的標簽顯示作者的名字,它是 list 控件所選擇的相應的值。
