一般支持数据绑定的 web 控件,例如 DorpDownList 控件、 CheckBoxList 控件等,都包含五个属性: DataSource 、 DataMember , DataTextField 、 DataValueField 和 DataTextFormatString 。 DataSource 用于获取数据源,亦即获取包含数据的集合;其他四个属性用于获取数据源中的一个字段值。然而,通常情况下,你想将这些数据源中的多个字段值绑定在一起赋值给其中的一个属性,这是不能直接实现的。下面我们将介绍两种方法用于实现这一功能。
以上限制在于不能将多个字段值绑定在一起,赋值给这四个属性中的其中一个;但是 SQL 语句却完全没有这种限制。所以,我们的第一个方法是使用 SQL 语句将源表中的两个或多个字段值绑定在一起,使用 AS 子句传递给另一个字段,这样就实现了一个字段包含多个字段值。由于现在一个字段就包含了多个字段的值,我们将其赋值给 web 控件的那四个属性时就不用有更多的考虑了。我们可以参考下面的语句看看这种方法的妙处:
strCmd="SELECT employeeid,lastName +','+firstName AS 'EmployeeName' FROM Employees";
这种方法十分简洁,也是最直接的一种方法,不过存在着效率不足的问题,而且有可能会产生重复数据。下面我们介绍另一种方法,我们可以将源表填充到一个数据集 DataSet 中,然后将数据集的数据放置到一个数据表 DataTable 中,然后给该表创建一个新列,该列由源表中的两个或多个字段构成,这样我们也实现了多个字段值的绑定。下面的语句可以说明这种方法的实现:
dt.Columns.Add(“EmployeeName”,typeod(String),”lastName+’,’+firstName”);
后一种方法的缺点在于创建新列的开销。不过这种方法条理比较清楚,而且不会产生重复数据的可能,建议使用这种方法。
为了说明这两种方法,下面的代码将两种方法放在一起实现了:
// 在此处放置用户代码以初始化页面
string strConn,strCmd;
strConn="DATABASE=NorthWind;SERVER=localhost;UID=sa;PWD=99133009;";
// 如果既需要将 firstName 和 LastName 绑定,又需要单独使用他们,下面的语句就会产生重复数据。
strCmd="SELECT employeeid,firstName,lastName,lastName +','+firstName AS 'EmployeeName' FROM Employees";
SqlDataAdapter dsda= new SqlDataAdapter(strCmd,strConn);
DataSet ds= new DataSet();
dsda.Fill(ds,"EmployeeList");
DataTable dt=ds.Tables["EmployeeList"];
// 第一种方法
//DDL1 是一个 DropDownList 控件
DDL1.DataSource=dt.DefaultView;
DDL1.DataTextField="EmployeeName";
DDL1.DataValueField="employeeid";
DDL1.DataBind();
/* 第二种方法
dt.Columns.Add("EmployeeName",typeod(String),"lastName+','+firstName");
DDL1.DataTextField="EmployeeName";
DDL1.DataBind();
- /