首页 > 代码库 > 数据源绑定

数据源绑定

ASP.NET数据绑定总结

 
 

概念:

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

分类:

ASP.NET中涉及到的数据绑定大概可以分为:

使用<%# 表达式 %>
使用DataSource属性
使用数据源控件

使用Eval方法

 

使用<%# 表达式 %> 绑定数据源

对于这种绑定方式,无论是Html标记,还是Web服务器控件都是实用的。

属性绑定:

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

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

集合绑定:

Web服务器控件绑定。

<asp:ListBox id="List1" datasource=‘<%# myArray %>‘ runat="server">
此句子将数组myArray绑定到ListBox控件。
表达式的绑定:
<%# ( customer.First Name + " " + customer.LastName ) %>

 

方法绑定:
<%# GetBalance(custID) %>

 

在为对象确定并设置了特定数据源后,必须将数据绑定到这些数据源。使用的方法是:
Page.DataBind 或Control.DataBind 两种方法。
这两种方法的使用方式很相似。主要差别在于:调用 Page.DataBind 方法后,所有数据源都将绑定到它们的服务器控件。Control.DataBind方法,将数据源绑定到被调用的服务器控件及其所有子控件。
在显式调用 Web 服务器控件的 DataBind 方法或在调用页面级的 Page.DataBind 方法之前,不会有任何数据呈现给控件。通常,可以从 Page_Load 事件调用 Page.DataBind(或 DataBind)。

 

使用DataSource属性绑定数据源

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

 

控件描述
CheckBoxList复远框组,可通过数据绑定动态生成
GridView像表格中一样分列显示数据源的字段
DataList用来显示模板定义的数据绑定列表
DropDownList单选下拉列表框控件
ListBox允许单选或多选的列表控件
RadioButtonList可通过数据绑定自动生成一组单选按钮
…….…….

使用list-bound控件显示DataSet

DataSet可看成是内存中的一个虚拟的数据库,我们只要

将list-bound控件的DataSource属性链接到数据源,ASP.NET

会自动给list-bound控件填充数据。把list-bound控件同一个

DataSet绑定在一起,必须设置以下属性:

属性描述
DataSource指定包含数据的DataSet
DataMember因为DataSet中可能有多个数据表,所以指定要显示的DataTable表名
DataTextField指定将在列表中显示的DataTable字段
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的比较

 

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

        

使用数据源控件

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

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

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

(关于如何创建数据源控件将不再介绍,请查阅相关资料。)

 

使用Eval方法绑定数据源

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

包括两个重载:(请点击相应链接查看具体用法)

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

DataBinder.Eval示例:

 

<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>

(格式化字符串参数是可选的。如果忽略参数,DataBinder.Eval 返回对象类型的值。

 

显示二位小数


<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
 

转换类型

((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4) 

{0:d} 日期只显示年月日

{0:yyyy-mm-dd} 按格式显示年月日

 

{0:c} 货币样式

<%#Container.DataItem("price","{0:¥#,##0.00}")%> 
<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>

数据源绑定