首页 / 网页编程 / ASP.NET / 深入ASP.NET数据绑定(下)——多样的绑定方式
        
            深入ASP.NET数据绑定(下)——多样的绑定方式2011-08-03 博客园 阿不在这个系列的上篇中介绍了数据绑定语法的原理以及.NET中如何实现单向绑定,中篇我们简单的介绍 了ASP.NET 2.0 中新增的Bind语法配合DataSourceControl来实现数据的自动双向绑定。这两部分的内容 相对动态抽象并且不常接触,没有很好的源代码支持很难解释清楚,要想真正弄清它们的内部原理,还需 要大家亲自动手去反编译分析动态编译的程序集。在了解了数据绑定语法的原理后,我还想来谈谈我中实践过程中遇到的一些问题以及其它实用的绑定 技巧。首先我们就来说说,特殊字段名的问题。我们知道在数据库当中,如果表名或字段名中包含有一些 特殊的不能是合法的字符时,都会使用[]将它们引起来,以便他们能够正常使用。但是在<%# Eval ("")%>的绑定语句当中,同时可以使用[],但是对于字段名中包含 "(",")","[","]"这4个字符却始终 运行出错。假设像我下面这样来绑定"电压(V)":<%# Eval("电压(V)")%>那么就会得到一个运行时错误:DataBinding:“System.Data.DataRowView”不包含名为“电压”的属性。表明括号是被认为是一个特殊字符,那我们如果给字段名加上[],如下:<%# Eval("[电压(V)]")%>此时,我们会得到另一个运行时错误:电压(V 既不是表 DataTable1 的 DataColumn 也不是 DataRelation。表明,即使加上[]也无法解决这个特殊字段名的问题。同时字段名中如果也存在中括号,也是会出现 这样的问题的。但是这样的字段名却在GridView的自动生成列中能被正常绑定呢?问题会出现在哪里呢? 分析和对比GridView的自动生成列与Eval这样的绑定语法在最终执行绑定代码上的不同,我们可以发现, GridView的自动生成列取值并不是使用DataBinder.Eval这个方法,它内部有自己的取值方式,但是在实 现上却是大同小异的。那究竟是在哪里出现了问题呢?我们找出DataBinder类的定义: