如何使用包含点(。)的列名称的Eval()?

时间:2011-09-27 19:23:51

标签: c# asp.net sql-server data-binding

在我的SQL Server表中,有一列slno.(是的,它包含一个点),它在SQL Server中运行正常。但是,<%#Eval("slno.")%>发出错误:

  

DataBinding:'System.Data.DataRowView'不包含名为'slno'的属性。

如何解决这个问题?我无法更改数据库中的列名:我从stored procedure获取数据,因此无法对其进行修改。

<ItemTemplate> <%#Eval("slno.") %> </ItemTemplate>

4 个答案:

答案 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()