在做ASP.NET绑定数据到模板列的时候,常常会遇到这么一种情况:数据库中的值与需要显示的值之间形成一种映射,但不直接显示。例如,有一个性别字段,在数据库中常常是bit型的:
create table A
(
id int primary key identity(1,1),
sex bit
)
然而,如果直接绑定到数据显示控件,会显示为一个CheckBox,很不直观。
也有可能是:性别被定义为一个char类型,然后,用M代替男性,F代替女性。
针对这种情况,有一种很简单的处理方法,就是建立一个处理函数,在绑定的时候,调用此函数。假设针对上面的A表,可以写这么一个函数,这个函数必须是proctected或者public的型,返回一个字符串(用于最终显示):
然后,对相应的绑定声明进行修改:
至此,所有映射就完成了。如果数据库里是M/F,那么,只需要修改DisplaySexCn函数就可以了。
以上是一种通用的方法。针对布尔类型的数据绑定,有一个小技巧,利用C#中的三元运算“?:”,可以很大程度上简化这个过程,可以直接修改绑定声明而不需要多写一个函数:
create table A
(
id int primary key identity(1,1),
sex bit
)
然而,如果直接绑定到数据显示控件,会显示为一个CheckBox,很不直观。
也有可能是:性别被定义为一个char类型,然后,用M代替男性,F代替女性。
针对这种情况,有一种很简单的处理方法,就是建立一个处理函数,在绑定的时候,调用此函数。假设针对上面的A表,可以写这么一个函数,这个函数必须是proctected或者public的型,返回一个字符串(用于最终显示):
protected string DisplaySexCn(ARow a) //假设ARow是一个强类型的DataRow
{
if(a.sex) return "男"; //当sex为true时,返回"男",完成true到"男"的映射
return "女"; //返回false到"女"的映射
}
{
if(a.sex) return "男"; //当sex为true时,返回"男",完成true到"男"的映射
return "女"; //返回false到"女"的映射
}
然后,对相应的绑定声明进行修改:
<%#DisplaySexCn((ARow)((DataRowView)Container.DataItem).Row)%>
至此,所有映射就完成了。如果数据库里是M/F,那么,只需要修改DisplaySexCn函数就可以了。
以上是一种通用的方法。针对布尔类型的数据绑定,有一个小技巧,利用C#中的三元运算“?:”,可以很大程度上简化这个过程,可以直接修改绑定声明而不需要多写一个函数:
<%#(bool)Eval("sex")?"男":"女"%>
Little knowledge is dangerous.