Bien souvent, on souhaiterait forcer l'utilisateur à confirmer ses choix lorsqu' il manipule un GridView... Pas évidant comme ça, car on a les champs de commandes du GridView et le ConfirmButtonExtender du toolkit Ajax... Alors si en plus on veut employer le tout dans une WebPart pour SharePoint... "même pas mal !".
Pour s' en sortir facilement, il suffit de créer un Template qui servira à afficher nos commandes, tout en introduisant les extensions utiles. Le Template étant entièrement codé hors fichier aspx, il est donc exploitable tel quel dans une WebPart pour SharePoint :)
Voici le Template en question :
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using AjaxControlToolkit; namespace SiteWeb { public class TemplateCommandes : ITemplate { #region Variables private private ListItemType _ItemType; private const String _HtmlSeparatreur = " "; #endregion #region Constructeur public TemplateCommandes(ListItemType type) { this._ItemType = type; } #endregion /// <summary> /// Instanciation des controls du template /// </summary> /// <param name="container"></param> public void InstantiateIn(Control container) { switch (this._ItemType) { case ListItemType.Item: { LinkButton button1 = new LinkButton() { Text = "Modifier", CommandName = "Edit" }; LinkButton button2 = new LinkButton() { ID = "ButtonDelete", Text = "Supprimer", CommandName = "Delete" }; ConfirmButtonExtender confirmation2 = new ConfirmButtonExtender() { TargetControlID = button2.ID, ConfirmText = "Etes vous certain de vouloir supprimer cet enregistrement?" }; container.Controls.Add(button1); container.Controls.Add(new LiteralControl(_HtmlSeparatreur)); container.Controls.Add(button2); container.Controls.Add(confirmation2); break; } case ListItemType.EditItem: { LinkButton button1 = new LinkButton() { Text = "Mettre à jour", CommandName = "Update" }; LinkButton button2 = new LinkButton() { Text = "Annuler", CommandName = "Cancel" }; ConfirmButtonExtender confirmation1 = new ConfirmButtonExtender() { TargetControlID = button1.ID, ConfirmText = "Etes vous certain de vouloir modifier cet enregistrement?" }; ConfirmButtonExtender confirmation2 = new ConfirmButtonExtender() { TargetControlID = button2.ID, ConfirmText = "Etes vous certain de vouloir annuler la modification de cet enregistrement?" }; container.Controls.Add(button1); container.Controls.Add(new LiteralControl(_HtmlSeparatreur)); container.Controls.Add(button2); container.Controls.Add(confirmation1); container.Controls.Add(confirmation2); break; } case ListItemType.Footer: { LinkButton footerButton = new LinkButton() { Text = "Ajouter un sous-compte", CommandName = "New" }; container.Controls.Add(footerButton); break; } } } } }
Pour s' en servir, il faut ajouter au GridView un TemplateField qui utilise les 3 déclinaisons possibles du Template :
// colonne des commandes MonGridView.Columns.Add(new TemplateField() { HeaderText = "Commandes", ItemTemplate = new TemplateCommandes(ListItemType.Item), EditItemTemplate = new TemplateCommandes(ListItemType.EditItem), FooterTemplate = new TemplateCommandes(ListItemType.Footer) }); // Template si le GridView est vide MonGridView.EmptyDateTemplate = new TemplateCommandes(ListItemType.Footer);
Note : il est possible d' utiliser le Template de Footer pour le EmptyDataTemplate du GridView, afin d' avoir la commande d' insertion quoi qu'il arrive.