Présentation des contrôles basés sur un modèle
Même si le contrôle serveur DataGrid décrit à la section précédente est adapté à de nombreux scénarios d'applications Web dans lesquels une représentation de type grille est appropriée, il est souvent nécessaire que la présentation des données soit bien plus riche. ASP.NET propose deux contrôles, DataList et Repeater, qui vous procurent une meilleure souplesse pour le rendu des données de type liste. Ces contrôles sont basés sur un modèle et ne possèdent donc pas de rendu par défaut qui leur soit propre. Le mode de rendu des données est totalement déterminé par votre implémentation des modèles de contrôle qui décrivent la manière dont les éléments de données doivent être présentés.
Comme le contrôle DataGrid, les contrôles DataList et Repeater prennent en charge une propriété DataSource qui peut être définie comme étant de type ICollection, IEnumerable ou IListSource. Les données de ce DataSource sont liées au contrôle à l'aide de sa méthode DataBind. Une fois les données liées, la mise en forme de chaque élément de données est décrite par un modèle.
La propriété ItemTemplate contrôle le rendu de chaque élément dans la collection DataSource. Dans un ItemTemplate, vous pouvez définir un code de présentation arbitraire (HTML ou autre). À l'aide de la syntaxe de liaison de données ASP.NET, vous pouvez insérer des valeurs à partir des données liées au contrôle DataList ou Repeater, comme le montre l'exemple suivant.
<ASP:Repeater id="MyRepeater" runat="server">
<ItemTemplate>
Hello <%# DataBinder.Eval(Container
.DataItem, "name") %> !
</ItemTemplate>
</ASP:Repeater>
Le Container représente le premier contrôle de la hiérarchie immédiate prenant en charge l'interface de marqueur System.Web.UI.INamingContainer. Dans ce cas, le Container est résolu en objet de type System.Web.UI.WebControls.RepeaterItem, possédant une propriété DataItem. Comme le Repeater effectue une itération sur la collection DataSource, DataItem contient l'élément en cours dans cette collection. Par exemple, si la source de données a la valeur ArrayList pour des objets Employee, le DataItem est de type Employees. S'il est lié à un DataView, le DataItem est de type DataRowView.
L'exemple suivant illustre un contrôle Repeater lié à un DataView (retourné par une requête SQL). HeaderTemplate et FooterTemplate ont également été définis et rendus au début et à la fin de la liste, respectivement.
Le contrôle Repeater effectue simplement une itération sur les données liées, en effectuant le rendu de ItemTemplate une fois pour chaque élément de la collection DataSource. Il ne restitue aucun élément à part ceux contenus dans ses modèles. Alors que le Repeater est un itérateur polyvalent, le DataList propose quelques fonctionnalités supplémentaires pour le contrôle de la présentation de la liste. Contrairement à Repeater, DataList effectue le rendu des éléments supplémentaires, tels que des lignes et des cellules de tableau, ainsi que des étendues contenant des attributs de style, à l'extérieur de la définition du modèle afin de permettre cette mise en forme plus riche. Par exemple, le contrôle DataList prend en charge les propriétés RepeatColumns et RepeatDirection qui spécifient si les données doivent être rendues dans plusieurs colonnes ainsi que le sens (vertical ou horizontal) de rendu des éléments de données. Le contrôle DataList prend également en charge des attributs de style, comme le montre l'exemple suivant.
<ASP:DataList runat="server" DataSource
="<%#MyData%>"
RepeatColumns="2"
RepeatDirection="Horizontal"
ItemStyle-Font-Size="10pt"
ItemStyle-Font-Name="Verdana"
>
...
</ASP:DataList>
Remarque : La suite de cette section concerne principalement les nombreuses fonctionnalités du contrôle DataList. Pour plus d'informations sur le contrôle Repeater, consultez la rubrique Repeater
de la section Référence des contrôles Web Forms de ce didacticiel.
L'exemple suivant illustre de manière plus détaillée la souplesse infinie des modèles en modifiant à nouveau ItemTemplate. Cette fois, une des valeurs DataItem remplace l'attribut « src » d'une balise <img>. Ce paramètre String format de DataBinder.Eval substitue également une valeur DataItem dans la chaîne de requête d'une URL.
Remarquez que comme plusieurs commandes peuvent exécuter ce gestionnaire d'événements, vous devez utiliser une instruction switch pour déterminer la commande qui a été déclenchée. L'exemple suivant illustre le fonctionnement de ce code.