2010-11-16 8 views
5

ho le seguenti classi (pseudocodice):Si può catalogare un gridview di asp.net in un campo in una classe base?

  • Prodotto (int Field1)
  • ItemDetail: Prodotto (int Campo2, string field3)

Se ho impostato ItemDetail come l'origine dati per un asp.net gridview:

grid.DataSource = new List<ItemDetail>(); 
grid.DataBind(); 

Posso utilizzare Field1 in GridView? In tal caso, qual è la sintassi corretta di DataBinder? Il seguente codice esplode cercando di trasmettere a un articolo:

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

Grazie in anticipo per qualsiasi aiuto.

EDIT: E io sono un deficiente. Avevo copiato il gridview e stavo chiamando un gestore di eventi RowDataBound per una griglia diversa ... Ci scusiamo per aver perso tempo a tutti, ma ci sono alcune buone informazioni qui a prescindere se qualcuno ha la stessa domanda. Alla fine, le proprietà pubbliche della classe base sono vincolanti correttamente. Grazie!

+0

Come soluzione, ho aggiunto i getter alla classe figlio che restituisce il campo base ... che non può essere la soluzione però ... – IronicMuffin

+0

IronicMuffin, ho modificato la tua domanda usando un blocco di codice piuttosto che il 'pre' Tag HTML (hai solo bisogno di indentare 4 spazi o usare il pulsante codice) - spero di avere il tuo markup giusto! –

+0

Quando esplode, quale eccezione ottieni? –

risposta

1

Se la proprietà della classe base è pubblica, non si dovrebbe avere un problema se si sta inizializzando anche nei costruttori figli.

Inoltre, non sono sicuro che l'associazione di esempio sia pseudocodice o meno, ma è necessario associare una griglia a un IListSource, IEnumerable o IDataSource, quindi è necessario un insieme, un elenco, IQueryable, ecc. Di ItemDetails .

+0

Buon punto, modificato. – IronicMuffin

+0

E questo è quello che pensavo. Potrebbe esserci qualcos'altro da fare qui ... – IronicMuffin

+0

Puoi postare alcune informazioni sulle classi? L'ho appena testato per essere doppiamente sicuro e non avevo problemi nel riferire una proprietà di classe base a una classe figlia. – jwiscarson

-1

Ciò richiederebbe alla classe ItemDetail di avere una proprietà denominata Campo1. Il resto della sintassi è comunque buono.

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

ItemDetal itemDetail = new ItemDetail(); 
itemDetail.Field1 = 100; 
  • dove Campo1 è una proprietà accessibile, e non solo un campo privato della tua classe. Questo dovrebbe scrivere 100 nella tua griglia.
+0

Beh, sì, ma il punto è che voglio usare Field1 dalla classe base e non duplicarlo nella classe figlio. C'è una speciale sintassi DataBinder per colpire la classe base? Non vedo troppa documentazione su questa particolare situazione. – IronicMuffin

+0

Se tutto va storto con il markup, è sempre possibile utilizzare l'evento OnItemDataBound per ottenere i valori corretti. Ma come ha detto jwiscarson, dovrebbe essere accessibile e ricordarsi di associare una lista di articoli/itemdetails. – Heki

Problemi correlati