Procedura: creare modelli nei controlli server Web DataList in modo dinamico
Aggiornamento: novembre 2007
I modelli non devono necessariamente essere assegnati in fase di progettazione. In alcuni casi può essere possibile definire il layout del modello in fase di progettazione, ma la quantità di modifiche che dovranno essere apportate in fase di esecuzione è tale che il caricamento di un nuovo modello in fase di esecuzione offre una maggiore semplicità di programmazione. In altri casi, pur disponendo di più modelli, può essere preferibile modificare il modello in fase di esecuzione.
Per creare un file di definizione del modello
Creare un nuovo file di testo con estensione ascx.
Aggiungere istruzioni per la definizione del modello al file di modello e salvarlo con gli stessi tag che si utilizzerebbe per qualsiasi altro modello dichiarativo.
Nell'esempio riportato di seguito viene illustrato il contenuto di un file ascx con il codice per un modello contenente controlli Label con associazioni a dati. In fase di esecuzione l'associazione dati verrà risolta nell'origine dati associata al controllo DataList.
Name: <asp:Label ID="CategoryNameLabel" Text='<%# Eval("CategoryName") %>'> </asp:Label> <br /> Description: <asp:Label ID="DescriptionLabel" Text='<%# Eval("Description") %>'> </asp:Label>
Per creare modelli in modo dinamico
Aggiungere alla pagina Web Form il codice necessario per caricare il modello tramite il metodo LoadTemplate. Questo metodo legge la definizione di un modello da un file e crea un oggetto ITemplate, che potrà essere assegnato a qualsiasi modello incluso in un controllo DataList.
Nell'esempio riportato di seguito viene utilizzato il gestore eventi Page_Init per caricare un modello creato nel modo descritto in precedenza e denominato NewTemplate.ascx.
Protected Sub Page_Init(ByVal Sender As System.Object, _ ByVal e As System.EventArgs) DataList1.AlternatingItemTemplate = _ Page.LoadTemplate("NewTemplate.ascx") End Sub
protected void Page_Init(object sender, EventArgs e) { DataList1.AlternatingItemTemplate = Page.LoadTemplate("NewTemplate.ascx"); }