Comment : personnaliser des éléments DataList au moment de l'exécution
Mise à jour : novembre 2007
Au cours du traitement d'une page, le contrôle DataList crée les éléments individuels qu'il doit rendre sur la page. Afin de permettre la personnalisation des éléments au fur et à mesure de leur création, le contrôle DataList déclenche deux événements :
L'événement ItemCreated est déclenché lorsque le contrôle DataList crée chaque élément, élément alterné, en-tête, pied de page, et ainsi de suite.
L'événement ItemDataBound est déclenché une fois que les contrôles d'un élément ont été liés aux données. Vous pouvez utiliser les paramètres d'événement pour accéder aux données servant à la liaison de données. Utilisez cet événement si la personnalisation est fonction des données.
En répondant à ces événements, vous pouvez modifier les éléments. Un exemple d'utilisation classique est la modification de l'apparence de l'élément en fonction des données affichées dans celui-ci. Par exemple, si une valeur numérique lue dans la base de données est négative, il est possible de définir une couleur rouge pour l'arrière-plan de l'élément.
Pour personnaliser les éléments au moment de l'exécution à l'aide de l'événement ItemCreated
Créez un gestionnaire d'événements pour l'événement ItemCreated du contrôle DataList.
Dans le gestionnaire d'événements, recherchez l'élément actif à l'aide de l'objet Item issu de l'objet événement-argument e. L'index de l'élément actuel est disponible par le biais de la propriété ItemIndex de l'objet Item, et son type est disponible par le biais de sa propriété ItemType (laquelle est définie à l'aide de l'énumération ListItemType).
Remarque : La propriété ItemIndex retourne uniquement une valeur positive pour les objets Item, AlternatingItem et SelectedItem. La valeur d'index des éléments d'en-tête, de pied de page et des séparateurs est -1.
L'exemple suivant montre comment modifier conditionnellement la couleur d'arrière-plan d'un élément. L'exemple utilise la propriété ItemType et l'énumération ListItemType pour définir les couleurs d'arrière-plan des éléments. Les valeurs LightGoldenrodYellow, DarkGoldenrod et Yellow sont définies respectivement pour les éléments, les éléments alternés et l'élément sélectionné.
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; } }
Au moment où l'événement ItemCreated est déclenché, les différents contrôles figurant dans les modèles ne sont pas encore liés aux données. Toutefois, les données sont disponibles dans l'événement ItemDataBound.
Pour personnaliser les éléments au moment de l'exécution à l'aide de l'événement ItemDataBound
Créez un gestionnaire d'événements pour l'événement ItemDataBound du contrôle DataList.
Dans le gestionnaire d'événements, vérifiez que vous travaillez avec un Item**, un** AlternatingItem ou un EditItem et pas avec un en-tête ou un pied de page.
Utilisez la propriété DataItem pour tester les données qui seront liées au contrôle et effectuer une comparaison sur la base de ces données.
L'exemple suivant montre comment effectuer un test conditionnel fondé sur les données. L'exemple effectue un cast de la propriété DataItem de l'argument d'événement sous forme d'objet DataRowView. Il extrait ensuite le champ appelé Quantité du contrôle DataItem actuel. Si la quantité est inférieure à 10, l'élément du contrôle DataList est affiché en rouge.
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; } } }