130 messaggi dal 26 agosto 2004
ho creato un oggetto, che supporta accesso tramite indice:

public object this[string propertyName] { get {.. } set {} }

ora ho un metodo che mi restituisce una lista di questi oggetti.
nell' aspx ho scritto:

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

ma a runtime ho un' errore che la proprieta cognome non esiste!

ma non capisco, perche ad esempio coun una datarow funziona e col mio oggetto no?

Stefano M.
Ciao,

c'è qualcosa che mi suona strano ... posta il codice.

Fabrizio Canevali
130 messaggi dal 26 agosto 2004
ciao fabrizio, innanzi tutto grazie!

public class ObjCurricula
{
private Hashtable ht = new Hashtable ();

public object this[string propertyName]
{
get { return ht[propertyName]; }
set { ht[propertyName] = value; }
}
}

da codice posso tranquillamente scrivere: oggetto["Cognome"] ad esempio..

ora ho una lista listaCV, definita come List<ObjCurricula >

nell' aspx ho creato una colonna,definita cosi:
<TemplateField>
<itemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Cognome")%>
</itemTemplate>
</TemplateField>

nel code behind:
myGridView.DataSource = listaCV;
myGridView.DataBind(); // ERRORE: proprieta: Cognome non esiste

sono riuscito a risolvere con questo workaround:
<%# ((ObjCurricula )Container.DataItem) ["Cognome"]%>

cioe facendo il cast esplicito... ma la curiosita di capire perche il datarow funziona è grande!

Stefano M.
130 messaggi dal 26 agosto 2004
dopo affannose ricerche,
ho scoperto che DataRowView (non datarow)funziona perche' implementa una strana interfaccia....

ICustomTypeDescriptor

ma è abbastanza macchinoso emulare un simile risultato!

quanto meno un po del mistero si è dissolto!!

Stefano M.
l'oggetto DataRow è leggermente più complesso.

la tua espressione di Binding dovrebbe essere la seguente:

          <%# DataBinder.Eval(Container.DataItem,"[\"Categoria\"]")%>



ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
438 messaggi dal 04 agosto 2002
Contributi
un suggerimento ai guru per un articolo di successo: una carrellata, la più ampia possibile, sulle espressioni di binding ... magari con pdf da stampare e appendere come promemoria
Pagherei per averlo

v
Modificato da vladimiro il 19 agosto 2008 00.06 -
nostromo ha scritto:
l'oggetto DataRow è leggermente più complesso.

la tua espressione di Binding dovrebbe essere la seguente:

 
          <%# DataBinder.Eval(Container.DataItem,"[\"Categoria\"]")%> 
 


ciao marco
Beh, considerando che "odi" le espressioni di Binding ... non male ...
Domani (oggi) mattina indago.

Fabrizio Canevali
per odiare devi conoscere, se conosci eviti

per vladimiro:

se hai voglia di indagare, dai un occhiata con il Reflector alla classe DataBinder.

in pratica l'epressione viene parserizzata cercando vari token, come il punto, e la parentesi quadre, in moda da decidere come comportasi.


ciao marco
Modificato da nostromo il 19 agosto 2008 01.42 -

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.