2011-09-27 11 views
7

En mi tabla de SQL Server hay una columna slno. (sí, contiene un punto) que funciona bien en SQL Server. Sin embargo, <%#Eval("slno.")%> está dando un error:Cómo usar Eval() con un nombre de columna que contiene un punto (.)?

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

¿Cómo se puede solucionar? No puedo cambiar el nombre de la columna en la base de datos: estoy obteniendo datos del stored procedure, así que no puedo modificarlo.

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

solo una conjetura. ¿Lo has probado encerrando entre corchetes []? – SaQiB

+0

Hubo un duplicado exacto de esta pregunta hace 5 minutos ... – mellamokb

+0

@SaQiB: Sí, lo intenté 'Eval ([" slno. "])' Y 'Eval (" [slno.] ")' Pero ninguno de ellos trabajando. – jams

Respuesta

7

uso

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

Alternativamente, puede utilizar

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

Para tener una referencia de MSDN ver http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

EDITAR - Otra opción:

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

EDIT 2 - según comentarios:

yo sepa Eval maneja la cadena como una expresión que se evalúa el uso de algunas reglas - estas normas tienen un manejo especial para el punto ...

GetPropertyValue otoh no aplica esas reglas (lo que significa que NO es un reemplazo completo para Eval AFAIK) teniendo así la capacidad de manejar casos donde el manejo de puntos de Eval causa problemas (como en este caso).

+0

Lo intenté, pero ninguno de ellos funcionaba SAD :( – jams

+1

, por favor, muestre la declaración exacta del procedimiento almacenado que devuelve esta columna ... – Yahia

+0

Ahora estoy tratando de usar un simple 'select * from tbPRecord' pero sigue obteniendo el error. – jams

-2

No utilizar DataBinder.eval(); eval() no se puede leer el campo después del punto (.).

su lugar, utilice DataBinder.GetPropertyValue()

0

he usado DataBinder.GetPropertyValue() como sigue:

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

y funcionó como un encanto en un proyecto de VB ASP.NET.

Cuestiones relacionadas