25 messaggi dal 17 aprile 2002
In attesa del libro che chiarirà tutti i miei dubbi  , vorrei capire come sia possibile creare un controllo che erediti da DataBoundControl e la cui visualizzazione sia controllata tramite template.
Devo comportarmi come con un normale templated control (cioè allegare ad un ITemplate un oggetto "DataItem" ed utilizzare la notazione <%# Container.DataItem %>) o esiste qualche "accorgimento" particolare (che permetta di utilizzare la notazione diretta <%# Eval("PropertyName") %>)?

Grazie
Prima di tutto scegli la classe corretta dalla quale ereditare. Se il tuo controllo in funzione della sorgente dati emette dell'html allora eredita da DataBoundControl (tipo DropDownList, ListBox ecc), se invece il tuo controllo in funzione della sorgente dati crea altri controlli eredita da CompositeDataBoundControl (tipo GridView, DetailsView ecc).
Se vuoi usare i template allora la scelta è la seconda.
Poi il trucco sta nell'istanziare il template (InstantiateIn) non sul tuo controllo custom, ma all'interno di un secondo controllo custom, che può essere una TableRow se è una tabella o un semplice Control che non fa niente, che è un semplice contenitore, ma che implementa l'interfaccia System.Web.UI.IDataItemContainer.
Praticamente il giro funziona così:
- implementi CompositeDataBoundControl.CreateChildControls. Hai a disposizione un datasource che è la sorgente dati se sta caricando il DataSource o è un array di object vuoti se è un postback. A te questo non importa, in entrambi i casi cicli su datasource creando n volte il tuo controllo che implementa IDataItemContainer, aggiungendolo alla collezione Controls e chiamando InstantiateIn del template. Se il secondo argomento dataBinding è true allora imposti l'oggetto corrente dell'enumeratore sulla proprietà DataItem e chiami sulla riga stessa il metodo DataBind.
Automaticamente lui pompa l'item in questione in uno stack contenuto a livello di pagina e fa sì che tu possa usare <%# Eval.. %>. La sintassi <%# lavora in fase di databinding, quindi va benissimo così.
Questo è grosso modo quello che devi fare.

Ciao

Il mio blog
Homepage
25 messaggi dal 17 aprile 2002
Grazie mille per il chiarimento

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.