Evil 域

当Evil遇上先知

导航

在TemplateField中显示与数据库中相异的值

Posted on 2007-05-10 07:43  Saar  阅读(654)  评论(0编辑  收藏  举报
    在做ASP.NET绑定数据到模板列的时候,常常会遇到这么一种情况:数据库中的值与需要显示的值之间形成一种映射,但不直接显示。例如,有一个性别字段,在数据库中常常是bit型的: 
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到"女"的映射
}

    然后,对相应的绑定声明进行修改:
<%#DisplaySexCn((ARow)((DataRowView)Container.DataItem).Row)%>

    至此,所有映射就完成了。如果数据库里是M/F,那么,只需要修改DisplaySexCn函数就可以了。
   
    以上是一种通用的方法。针对布尔类型的数据绑定,有一个小技巧,利用C#中的三元运算“?:”,可以很大程度上简化这个过程,可以直接修改绑定声明而不需要多写一个函数:
<%#(bool)Eval("sex")?"":""%>