C#中的数据绑定

一.概要

数据绑定:数据源与服务器控件的关联,“数据绑定”是一种把数据绑定到一种用户界面元素(控件)的通用机制。

数据绑定表达式必须包含在语法 <%# %>字符之间。

二.类型

1.使用<%# 表达式 %> 

 (1)属性绑定:

    可以将数据绑定表达式包含在服务器控件或者普通的html元素的开始标记中属性名/属性值对的值侧。

    例:将HTML文本框文本绑定到页面的一个字段name(注:这个字段必须为公有字段或受保护字段,即访问修饰符为public或protected),在HTML源中可以这样绑定。

 <input type="text" value="<%# name %>"> 

 (2)集合绑定:

   Web服务器控件绑定。此句子将数组myArray绑定到ListBox控件。

<asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">  
 (3)表达式的绑定:
<%# ( customer.First Name + " " + customer.LastName ) %>

 (4)方法绑定:

<%# GetBalance(custID) %>
在为对象确定并设置了特定数据源后,必须将数据绑定到这些数据源。使用的方法是:Page.DataBind 或Control.DataBind 两种方法。
这两种方法的使用方式很相似。主要差别在于:
调用 Page.DataBind 方法后,所有数据源都将绑定到它们的服务器控件。
调用 Control.DataBind方法后,将数据源绑定到被调用的服务器控件及其所有子控件。
在显式调用 Web 服务器控件的 DataBind 方法或在调用页面级的 Page.DataBind 方法之前,不会有任何数据呈现给控件。
通常,可以从 Page_Load 事件调用 Page.DataBind(或 DataBind)。
例如:
<asp:TextBox ID="TextBox1" runat="server" Text='<%#数据绑定表达式%>' ></asp:TextBox><br />
如果此时的数据绑定表达式是Eval("数据库中某个表的某个字段")等,那么必须把TextBox1放在某个循环显示的控件的模板中才正确,否则会提示:Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。其实就是想让你把TextBox1放在像Repeater,DataList,GridView这样的控件的模板中

2.使用DataSource属性  

通常使用DataSource属性进行数据源绑定的为list-bound控件( 连接到数据源并把来自数据源的数据显示出来的Web服务器控件)。

(1)CheckBoxList     复选框组,可通过数据绑定动态生成

(2)GridView           像表格中一样分列显示数据源的字段

(3)DataList            用来显示模板定义的数据绑定列表

(4)DropDownList    单选下拉列表框控件

(5)ListBox             允许单选或多选的列表控件

(6)RadioButtonList 可通过数据绑定自动生成一组单选按钮

使用list-bound控件显示DataSet,DataSet可看成是内存中的一个虚拟的数据库,我们只要将list-bound控件的DataSource属性链接到数据源,ASP.NET会自动给list-bound控件填充数据。把list-bound控件同一个DataSet绑定在一起,必须设置以下属性:

(1)DataSource      指定包含数据的DataSet

(2)DataMember    因为DataSet中可能有多个数据表,所以指定要显示的DataTable表名

(3)DataTextField   指定将在列表中显示的DataTable字段

(4)DataValueField 指定DataTable中某字段,此字段将成为列表中被选中的值

使用DataSource数据源后,还需要调用list-bound控件的DataBind方法来连接DataSet、DataReader等数据源。

CheckBoxList.DataBind();

与DataSet数据源的绑定

完整的绑定示例:

private void Page_Load(object sender, System.EventArgs e)
{
  //防止重复绑定
  if (!IsPostBack)
  {
    //连接数据库,并从数据库中读取数据存入DataSet中
    string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ToString();
    DataSet ds = new DataSet();
    SqlDataAdapter ada = new SqlDataAdapter("SELECT * FROM Products", connString);
    ada.Fill(ds);
    //以下是数据绑定需要的代码
    this.DrListCompany.DataSource = ds;
    this.DrListCompany.DataMember = "Table";   
    this.DrListCompany.DataTextField = "ProductName";
    this.DrListCompany.DataValueField = "ProductID";
    this.DrListCompany.DataBind();
  }
}

DataTextFiled和DataValueField两个属性值,两个属性分别绑定不同的字段,前者表示的是控件显示出的字段,后者表示控件代表的值。

当使用类似:Response.Write(this.DrListCompany.SelectedValue); 输出所选控件的值时,打印的是你DataValueField属性中绑定的字段 ProductID的值。

 

与DataReader数据源的绑定
SqlCommandcmd=newSqlCommand("SELECT SupplierID,CompanyNameFROMSuppliers",conn);
conn.Open();
SqlDataReaderreader=cmd.ExecuteReader();
this.DrListCompany.DataSource=reader;
this.DrListCompany.DataTextField="CompanyName";
this.DrListCompany.DataValueField="SupplierID";
this
.DrListCompany.DataBind();
//绑定完成后才能关闭DataReader对象和连接对象
reader.Close();
cmd.Connection.Close();


DataSet与DataReader的比较

DataSet DataReader
读或写数据 只读
包含多个来自不同数据库的表 使用 SQL 语句从单个数据库
非连接模式 连接模式
绑定到多个控件 只能绑定到一个控件
向前或向后浏览数据 只能向前
较慢的访问速度 较快的访问速度

 

3.使用数据源控件  

数据源控件封装所有获取和处理数据的功能,主要包括连接数据源、使用Select、Update、Delete和Insert等对数据进行管理。

数据源控件包括SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource、SiteMapDataSource。

数据绑定控件可以通过自身的DataSourceID属性,将数据源控件设置为它的数据源。

4.使用Eval方法

ASP.NET 支持分层数据绑定模型,数据绑定表达式使用 Eval 和 Bind 方法将数据绑定到控件,并将更改提交回数据库。

Eval 方法是静态单向(只读)方法,所以Eval 函数用于单向(只读)绑定,该方法采用数据字段的值作为参数并将其作为字符串返回。

Bind 方法支持读/写功能,所以Bind 函数用于双向(可更新)绑定。该方法可以检索数据绑定控件的值并将任何更改提交回数据库。

XPath 方法支持对XML类型的数据源提供支持。

DataBinder.Eval方法,在运行时使用反射来分析和计算对象的数据绑定表达式。

包括两个重载:

名称说明
Eval(Object, String) 在运行时计算数据绑定表达式。
Eval(Object, String, String) 在运行时计算数据绑定表达式,并将结果的格式设置为字符串。

 

摘抄:http://www.zblog.us/programing/web/asp-net-data-binding.html | 赵杰的博客

posted @ 2012-12-05 18:38  小三西西  阅读(1163)  评论(0)    收藏  举报