开发者

How to use Eval() with a column name that contains a dot(.)?

In my SQL Server table there is a column slno. (yes, it contains a dot) that is working fine in SQL Server. However, <%#Eval("slno.")%> is giving an error:

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'slno'.

How can this be so开发者_开发问答lved? I can't change column name in database: I am getting data from stored procedure so I cannot modify it.

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


use

<%# ((DataRowView)Container.DataItem)["slno."] %>

Alternatively use

<%# DataBinder.Eval (Container.DataItem, "slno.") %>

For MSDN reference see http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

EDIT - Another option:

<%# DataBinder.GetPropertyValue(Container.DataItem, "slno.") %>

EDIT 2 - as per comments:

AFAIK Eval handles the string as an expression which it evaluates using some rules - these rules have special handling for the dot...

GetPropertyValue OTOH does not apply those rules (which means it is NOT a full replacement for Eval AFAIK) thus having the ability to handle cases where the dot handling of Eval leads to problems (like in this case).


I Used DataBinder.GetPropertyValue() as it follows:

DataBinder.GetPropertyValue(Container.DataItem, "Name of my Fields with(Parentheses)") 

and Worked like a Charm on a ASP.NET VB Project.


You can use SELECT AS in your SELECT SQL statement.

SELECT Tabl1.slno. AS slno_no_dot from Table1

than

<ItemTemplate> <%#Eval("slno_no_dot") %> </ItemTemplate>


I recently ran into the same issue in a self-written customcontrol. In some cases I need to use the syntax "object.property" and sometimes I need to use "columnname.with.dots". Finally I solved it by using a Try-Catch block:

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);
}         

           
                    


Do not use DataBinder.eval(); eval() can not read field after dot(.).

Instead, use DataBinder.GetPropertyValue()

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜