2011-09-27 5 views
7

Nella mia tabella di SQL Server è presente una colonna slno. (sì, contiene un punto) che funziona correttamente in SQL Server. Tuttavia, <%#Eval("slno.")%> sta dando un errore:Come utilizzare Eval() con un nome di colonna che contiene un punto (.)?

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

Come può risolvere il problema? Non riesco a cambiare il nome della colonna nel database: sto ricevendo dati da stored procedure quindi non posso modificarlo.

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

solo una supposizione. hai provato a racchiuderlo tra parentesi []? – SaQiB

+0

C'era un duplicato esatto di questa domanda circa 5 minuti fa ... – mellamokb

+0

@SaQiB: Sì, l'ho provato 'Eval ([" slno. "])' E 'Eval (" [slno.] ")' Ma nessuno di loro lavorano. – jams

risposta

7

uso

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

In alternativa utilizzare

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

Per riferimento MSDN vedere http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

EDIT - Un'altra opzione:

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

EDIT 2 - come da commenti:

AFAIK Eval gestisce la stringa come un'espressione che si valuta con alcune regole - queste regole hanno una gestione speciale per il punto ...

GetPropertyValue OTOH non applica tali regole (il che significa che NON è un sostituto completo per Eval AFAIK) avendo così la possibilità di gestire casi in cui la gestione dei punti di Eval porta a problemi (come in questo caso).

+0

Ho provato ma nessuno di loro funziona SAD :( – jams

+1

quindi si prega di mostrare la dichiarazione esatta della procedura memorizzata che restituisce questa colonna ... – Yahia

+0

Ora sto cercando di utilizzare il semplice 'select * da tbPRecord', ma continuo a ricevere errore – jams

-2

Non utilizzare DataBinder.eval(); eval() non può leggere il campo dopo il punto (.).

Al contrario, utilizzare DataBinder.GetPropertyValue()

0

ho usato DataBinder.GetPropertyValue() come segue:

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

e ha lavorato come un fascino su un progetto VB ASP.NET.

Problemi correlati