在我的SQL Server表中,有一列slno.
(是的,它包含一个点),它在SQL Server中运行正常。但是,<%#Eval("slno.")%>
发出错误:
DataBinding:'System.Data.DataRowView'不包含名为'slno'的属性。
如何解决这个问题?我无法更改数据库中的列名:我从stored procedure
获取数据,因此无法对其进行修改。
<ItemTemplate> <%#Eval("slno.") %> </ItemTemplate>
答案 0 :(得分:9)
使用
<%# ((DataRowView)Container.DataItem)["slno."] %>
或者使用
<%# DataBinder.Eval (Container.DataItem, "slno.") %>
有关MSDN参考,请参阅http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx
编辑 - 另一种选择:
<%# DataBinder.GetPropertyValue(Container.DataItem, "slno.") %>
编辑2 - 根据评论:
AFAIK Eval
将字符串作为一个表达式处理,它使用一些规则进行评估 - 这些规则对点有特殊处理......
GetPropertyValue
OTOH不适用这些规则(这意味着它不是Eval
AFAIK的完全替代品),因此能够处理Eval
的点处理导致的情况问题(就像在这种情况下)。
答案 1 :(得分:0)
我使用了DataBinder.GetPropertyValue(),如下所示:
DataBinder.GetPropertyValue(Container.DataItem, "Name of my Fields with(Parentheses)")
并且像ASP.NET VB项目中的魅力一样工作。
答案 2 :(得分:0)
您可以在SELECT SQL语句中使用SELECT AS。
SELECT Tabl1.slno. AS slno_no_dot from Table1
比
<ItemTemplate> <%#Eval("slno_no_dot") %> </ItemTemplate>
答案 3 :(得分:-2)
不要使用DataBinder.eval()
; eval()
无法在点(。)之后读取字段。
相反,请使用DataBinder.GetPropertyValue()