首页 > 代码库 > 数据源绑定
数据源绑定
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">
<%# ( customer.First Name + " " + customer.LastName ) %>
<%# GetBalance(custID) %>
使用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);
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 语句从单个数据库 |
非连接模式 | 连接模式 |
绑定到多个控件 | 只能绑定到一个控件 |
向前或向后浏览数据 | 只能向前 |
较慢的访问速度 | 较快的访问速度 |
使用数据源控件
数据源控件封装所有获取和处理数据的功能,主要包括连接数据源、使用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:yyyy-mm-dd} 按格式显示年月日
{0:c} 货币样式
<%#Container.DataItem("price","{0:¥#,##0.00}")%>
<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>
数据源绑定