|
一般支持?jǐn)?shù)據(jù)綁定的web控件,例如DorpDownList控件、CheckBoxList控件等,都包含五個(gè)屬性:DataSource、DataMember,DataTextField、DataValueField和DataTextFormatString。DataSource用于獲取數(shù)據(jù)源,亦即獲取包含數(shù)據(jù)的集合;其他四個(gè)屬性用于獲取數(shù)據(jù)源中的一個(gè)字段值。然而,通常情況下,你想將這些數(shù)據(jù)源中的多個(gè)字段值綁定在一起賦值給其中的一個(gè)屬性,這是不能直接實(shí)現(xiàn)的。下面我們將介紹兩種方法用于實(shí)現(xiàn)這一功能。
以上限制在于不能將多個(gè)字段值綁定在一起,賦值給這四個(gè)屬性中的其中一個(gè);但是SQL語(yǔ)句卻完全沒(méi)有這種限制。所以,我們的第一個(gè)方法是使用SQL語(yǔ)句將源表中的兩個(gè)或多個(gè)字段值綁定在一起,使用AS子句傳遞給另一個(gè)字段,這樣就實(shí)現(xiàn)了一個(gè)字段包含多個(gè)字段值。由于現(xiàn)在一個(gè)字段就包含了多個(gè)字段的值,我們將其賦值給web控件的那四個(gè)屬性時(shí)就不用有更多的考慮了。我們可以參考下面的語(yǔ)句看看這種方法的妙處:
strCmd="SELECT employeeid,lastName +','+firstName AS 'EmployeeName' FROM Employees";
這種方法十分簡(jiǎn)潔,也是最直接的一種方法,不過(guò)存在著效率不足的問(wèn)題,而且有可能會(huì)產(chǎn)生重復(fù)數(shù)據(jù)。下面我們介紹另一種方法,我們可以將源表填充到一個(gè)數(shù)據(jù)集DataSet中,然后將數(shù)據(jù)集的數(shù)據(jù)放置到一個(gè)數(shù)據(jù)表DataTable中,然后給該表創(chuàng)建一個(gè)新列,該列由源表中的兩個(gè)或多個(gè)字段構(gòu)成,這樣我們也實(shí)現(xiàn)了多個(gè)字段值的綁定。下面的語(yǔ)句可以說(shuō)明這種方法的實(shí)現(xiàn):
dt.Columns.Add(“EmployeeName”,typeod(String),”lastName+’,’+firstName”);
后一種方法的缺點(diǎn)在于創(chuàng)建新列的開(kāi)銷(xiāo)。不過(guò)這種方法條理比較清楚,而且不會(huì)產(chǎn)生重復(fù)數(shù)據(jù)的可能,建議使用這種方法。
為了說(shuō)明這兩種方法,下面的代碼將兩種方法放在一起實(shí)現(xiàn)了:
// 在此處放置用戶(hù)代碼以初始化頁(yè)面
string strConn,strCmd;
strConn="DATABASE=NorthWind;SERVER=localhost;UID=sa;PWD=99133009;";
//如果既需要將firstName和LastName綁定,又需要單獨(dú)使用他們,下面的語(yǔ)句就會(huì)產(chǎn)生重復(fù)數(shù)據(jù)。
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是一個(gè)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();
* /
|
溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!