Procedura: personalizzare gli elementi DataList in fase di esecuzione
Aggiornamento: novembre 2007
Durante l'elaborazione della pagina, il controllo DataList crea singoli elementi di cui verrà eseguito il rendering nella pagina. Per consentire la personalizzazione degli elementi durante la creazione, il controllo DataList genera due eventi:
L'evento ItemCreated viene generato quando il controllo DataList crea ciascun elemento, elemento alternato, intestazione, piè di pagina e così via.
L'evento ItemDataBound viene generato dopo che i controlli all'interno di un elemento sono stati associati a dei dati. È possibile utilizzare i parametri di evento per accedere ai dati utilizzati per l'associazione dati. Questo evento può essere utilizzato se la personalizzazione dipende dai dati.
Rispondendo a tali eventi è possibile modificare gli elementi. Vengono in genere utilizzati per modificare l'aspetto dell'elemento in base ai dati in esso visualizzati. È ad esempio possibile impostare il colore di sfondo dell'elemento sul colore rosso nel caso in cui un valore numerico letto da un database sia negativo.
Per personalizzare gli elementi in fase di esecuzione mediante l'evento ItemCreated
Creare un gestore eventi per l'evento ItemCreated del controllo DataList.
Nel gestore eventi ottenere l'elemento corrente utilizzando l'oggetto Item dall'oggetto argomento dell'evento e. L'indice dell'elemento corrente è disponibile tramite la proprietà ItemIndex dell'oggetto Item e il relativo tipo è disponibile tramite la relativa proprietà ItemType (che viene definita utilizzando l'enumerazione ListItemType).
Nota:
La proprietà ItemIndex restituisce un valore positivo solo per gli oggetti Item, AlternatingItem e SelectedItem. Il valore dell'indice per gli elementi corrispondenti a intestazioni, piè di pagina e separatori è -1.
L'esempio riportato di seguito illustra come modificare il colore di sfondo di un elemento in base a determinate condizioni. Nell'esempio viene utilizzata la proprietà ItemType e l'enumerazione ListItemType per impostare i colori di sfondo degli elementi. Gli elementi vengono impostati su LightGoldenrodYellow, gli elementi alternati vengono impostati su DarkGoldenrod e l'elemento selezionato su Yellow.
Protected Sub DataList1_ItemCreated(ByVal sender As Object, _ ByVal e As EventArgs) Select Case e.Item.ItemType Case ListItemType.Item e.Item.BackColor = _ System.Drawing.Color.LightGoldenrodYellow Case ListItemType.AlternatingItem e.Item.BackColor = System.Drawing.Color.DarkGoldenrod Case ListItemType.SelectedItem e.Item.BackColor = System.Drawing.Color.Yellow Case Else ' Add code here to hand the header, footer, and ' separator templates. End Select End Sub
protected void DataList1_ItemCreated(object sender, EventArgs e) { switch (e.Item.ItemType) { case ListItemType.Item : e.Item.BackColor = System.Drawing.Color.LightGoldenrodYellow; break; case ListItemType.AlternatingItem : e.Item.BackColor = System.Drawing.Color.DarkGoldenrod; break; case ListItemType.SelectedItem : e.Item.BackColor = System.Drawing.Color.Yellow; break; default : // Add code here to handle the header, footer, and // separator templates. break; } }
Quando viene generato l'evento ItemCreated, i singoli controlli nei modelli non sono ancora stati associati ai dati. I dati sono tuttavia disponibili nell'evento ItemDataBound.
Per personalizzare gli elementi in fase di esecuzione mediante l'evento ItemDataBound
Creare un gestore eventi per l'evento ItemDataBound del controllo DataList.
Nel gestore eventi assicurarsi di utilizzare un elemento Item,AlternatingItem o EditItem e non un'intestazione o piè di pagina.
Utilizzare la proprietà DataItem per verificare i dati che verranno associati al controllo ed effettuare un confronto in base a tale verifica.
L'esempio riportato di seguito illustra come effettuare una verifica condizionale in base ai dati. Nell'esempio viene eseguito il cast della proprietà DataItem dell'argomento dell'evento come un oggetto DataRowView. Viene quindi estratto il campo denominato Quantity dall'elemento DataItem corrente. Se la quantità è inferiore a 10, l'elemento nel controllo DataList viene visualizzato in rosso.
Protected Sub DataList1_ItemDataBound(ByVal sender As Object, _ ByVal e As DataListItemEventArgs) If e.Item.ItemType = ListItemType.Item Or _ e.Item.ItemType = ListItemType.AlternatingItem Then Dim drv As System.Data.DataRowView = _ CType(e.Item.DataItem, System.Data.DataRowView) Dim quantity As Integer = _ Integer.Parse(drv.Row("Quantity").ToString()) If (quantity < 10) Then e.Item.BackColor = System.Drawing.Color.Red End If End If End Sub
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) { if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { System.Data.DataRowView drv = (System.Data.DataRowView)(e.Item.DataItem); int quantity = int.Parse(drv.Row["Quantity"].ToString()); if (quantity < 10) { e.Item.BackColor = Color.Red; } } }