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">
<%# ( customer.First Name + " " + customer.LastName ) %>
(4)方法绑定:
<%# GetBalance(custID) %>
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的值。
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 | 赵杰的博客