DropDownList之类的控件可以绑定数据源DataTable或IEnumerable<>之类的对象源,但其Text默认只能绑定一个字段(属性),如果需要绑定多个字段组合的值则比较麻烦,网上一般的解决方法是在SQL SELECT语句添加组合字段或添加数据对象的属性来表示组合属性,这种方法能够解决问题,但显得不灵活而麻烦,因为前端的显示需求可能是多变的,如果每一个场景要求不同的显示则都要去增加组合字段或新属性。
其实这个问题可以通过LINQ来完美解决,通过LINQ的FROM .. IN .. SELECT NEW {}来构造匿名对象,我们实际上可以灵活的绑定字段的组合值。
假设我们的数据对象为:
public class DataObject{
public string Id{get;set;}
public string Val1{get;set;}
public string Val2{get;set;}
}
其中Id为主键,前端需要显示的值为Val1,Val2的组合,比如:string.Format("{0}{1}",dataObject.Val1,dataObject.Val2),正常情况下DropDownList是不能绑定多个属性(字段)的,但
我们可以用LINQ来灵活的处理这种情况:
dropDownList.DataValueField="Id";
dropDownList.DataTextField="ValDescription";//ValDescription是我们临时定义的属性名称
dropDownList.DataSource=from dataObject in dataObjects select new {dataObject.Id,ValDescription=string.Format("{0}{1}",dataObject.Val1,dataObject.Val2};
这样DropDownList控件就可以任意的显示我们的组合字段,而且无需对数据模型或数据访问层做任何的改变。