如何对包含点(.)的列名使用Eval()
本文关键字:Eval 包含点 | 更新日期: 2023-09-27 18:09:44
在我的SQL Server表中有一个列slno.
(是的,它包含一个点),在SQL Server中工作良好。然而,<%#Eval("slno.")%>
给出了一个错误:
数据绑定:"System.Data。DataRowView'不包含名为'slno'的属性。
如何解决这个问题?我不能改变数据库中的列名:我从stored procedure
获得数据,所以我不能修改它。
<ItemTemplate> <%#Eval("slno.") %> </ItemTemplate>
use
<%# ((DataRowView)Container.DataItem)["slno."] %>
使用或者
<%# DataBinder.Eval (Container.DataItem, "slno.") %>
MSDN参考参见http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx
EDIT -另一个选项:
<%# DataBinder.GetPropertyValue(Container.DataItem, "slno.") %>
编辑2 -按注释:
AFAIK Eval
处理字符串作为表达式,它使用一些规则进行计算-这些规则对点有特殊处理…
GetPropertyValue
OTOH不适用这些规则(这意味着它不是Eval
AFAIK的完全替代),因此有能力处理Eval
的点处理导致问题的情况(就像在这种情况下)。
我使用的DataBinder.GetPropertyValue()如下:
DataBinder.GetPropertyValue(Container.DataItem, "Name of my Fields with(Parentheses)")
和工作像一个魅力的ASP。. NET VB项目。
您可以在SELECT SQL语句中使用SELECT AS。
SELECT Tabl1.slno. AS slno_no_dot from Table1
比<ItemTemplate> <%#Eval("slno_no_dot") %> </ItemTemplate>
我最近在自己编写的自定义控件中遇到了同样的问题。在某些情况下,我需要使用语法"object.property"有时我需要使用"columnname.with.dots"最后,我通过使用Try-Catch块解决了这个问题:
object value;
try
{
// Try "Object.Property" approach...
value = DataBinder.Eval(container.DataItem, Fieldname);
}
catch
{
// fallback for columns containing dots or other special characters
value = DataBinder.GetPropertyValue(container.DataItem, Fieldname);
}
不要使用DataBinder.eval()
;eval()
无法读取点(.)后的字段。
使用DataBinder.GetPropertyValue()