Asp.net 简明教程

ASP.NET - Data Binding

每个 ASP.NET Web 窗体控件均从其父控件类继承 DataBind 方法,它为其提供绑定数据到其至少一个属性的内在功能。这称为 simple data bindinginline data binding

简单的 data binding 涉及将实现 IEnumerable 界面或 DataSet 和 DataTable 类附加到控件的 DataSource 属性。

另一方面,一些控件可以通过 DataSource 控件将数据记录、列表或列绑定到其结构中。这些控件派生自 BaseDataBoundControl 类。这称为 declarative data binding

数据源控件帮助 data bound 控件实现诸如排序、分页和编辑数据集合之类的功能。

BaseDataBoundControl 是一个抽象类,它被另外两个抽象类继承:

  1. DataBoundControl

  2. HierarchicalDataBoundControl

抽象类 DataBoundControl 又被另外两个抽象类继承:

  1. ListControl

  2. CompositeDataBoundControl

能够进行简单 data binding 的控件派生自 ListControl 抽象类,这些控件为:

  1. BulletedList

  2. CheckBoxList

  3. DropDownList

  4. ListBox

  5. RadioButtonList

能够进行声明式数据绑定(更加复杂的数据绑定)的控件派生自抽象类 CompositeDataBoundControl。这些控件为:

  1. DetailsView

  2. FormView

  3. GridView

  4. RecordList

Simple Data Binding

简单的数据绑定涉及只读的选择列表。这些控件可以绑定到数据库中的阵列列表或字段。选择列表从数据库或数据源中获取两个值;列表显示一个值,另一个值被认为是对应于显示的值。

让我们举一个小的示例来理解这个概念。创建一个包含项目符号列表和 SqlDataSource 控件的网站。将数据源控件配置为从数据库中检索两个值(我们在这个示例中使用与前一章相同的 DotNetReferences 表)。

为项目符号列表控件选择一个数据源涉及:

  1. 选择数据源控件

  2. 选择要显示的字段,称为数据字段

  3. 选择一个值的字段

choose data source

在应用程序执行时,检查整个标题列是否绑定到项目符号列表并显示。

choose data source2

Declarative Data Binding

我们在上一个教程中已经使用 GridView 控件使用了声明性数据绑定。其他能够以表格方式显示和操作数据的复合数据绑定控件为 DetailsView、FormView 和 RecordList 控件。

在下一个教程中,我们将研究处理数据库(即、ADO.NET)的技术。

然而,数据绑定涉及以下对象:

  1. 存储从数据库检索的数据集。

  2. 数据提供程序,它通过对连接执行命令从数据库检索数据。

  3. 数据适配器,它发布存储在命令对象中的选择语句;它还能够通过发布插入、删除和更新语句更新数据库中的数据。

数据绑定对象之间的关联:

declarative data binding

Example

让我们执行以下步骤:

Step (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;
         }
      }
   }
}

Step (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>

Step (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;
   }
}

注意以下内容:

  1. booklist 类有两个属性:bookname 和 authorname。

  2. createbooklist 方法是创建一个名为 allbooks 的 booklist 对象数组的用户定义方法。

  3. Page_Load 事件处理程序确保创建书籍列表。该列表为 IList 类型,其实现了 IEnumerable 接口,并且能够绑定到列表控件。页面加载事件处理程序将 IList 对象“bklist”绑定到列表控件。bookname 属性将显示,而 authorname 属性被视为该值。

  4. 在运行页面时,如果用户选择一本书,则其名称将由列表控件选中并显示,而相应的标签将显示作者名称,即所选列表控件索引的相应值。

data binding result