IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Gridview - Evénement command sur un ImageButton non levé


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Gridview - Evénement command sur un ImageButton non levé
    Bonjour,

    Je suis en train de réaliser une page en ASP.NET / C#.
    Sur cette page j'ai deux Textbox, deux DropDownList et un Button.
    Au chargement de ma page il n'y a que les Textbox et les DropDownList qui se chargent.
    Lors du clique sur le Button le datasource (une Liste d'object) de mon Gridview est rempli en code-behind et il est affiché.
    Mes objets contiennent une propriété IsValid, qui est un Boolean, en fonction de ce Boolean je dois afficher soit une Image (une petite image indiquant que c'est valide) si c'est true, et si c'est false je dois afficher un ImageButton qui au déclenchement doit intervenir en bdd pour changer la propriété à true.
    J'ai fais un premier essai en statique où j'ai toujours mis le ImageButton et avec les commands je lance ma requête et ca change la propriété de mon objet. Ca a bien fonctionné. Cet ImageButton je le déclarais dans mon code ASP.

    Maintenant je dois faire que cela soit dynamique. Donc pour cela j'ai fais comme suis:
    Ma déclaration du Gridview (Je ne met que la partie intéressante).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AlternatingRowStyle-BackColor="Beige" EmptyDataText="Aucun r&eacute;sultat trouv&eacute;" OnRowDataBound="CustomersGridView_RowDataBound" OnRowCreated="GridView1_RowCreated">
        <Columns>
          <%-- <asp:CommandField ShowEditButton="true" EditImageUrl="~/images/webdev-config-32x32.png"
            ButtonType="Image" HeaderText="Edit" />--%>
          <asp:TemplateField HeaderText="Edit">
            <ItemTemplate>
              <asp:ImageButton ID="btnValidate" ImageUrl="~/images/webdev-config-32x32.png" AlternateText="Edit"
                runat="server" PostBackUrl='<%# "./edit.aspx?id=" + Eval("Id") %>' />
              <asp:HiddenField ID="idprodmon" runat="server" Value='<%# Eval("Id")%>' />
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="Valider">
            <ItemTemplate>
            </ItemTemplate>
          </asp:TemplateField>
    ...
          <asp:TemplateField HeaderText="Suppr">
            <ItemTemplate>
              <asp:ImageButton ID="btnSuppr" ImageUrl="~/images/webdev-cancel-32x32.png" AlternateText="Suppr"
                runat="server" CommandName="suppr" CommandArgument='<%# Eval("Id")%>' OnCommand="CommandBtn_Click" />
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
      </asp:GridView>
    La fonction liée à l'événement RowDataBound:
    J'ai testé avec le RowDataBound et RowCreated, ca fonctionne dans les deux cas, j'ai décidé de mettre le code dans le RowDataBound, je ne sais pas ce qui est le plus conseillé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
      protected void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
      {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          ShowValidateBtnOrImg(e);
        }
      }
     
      private void ShowValidateBtnOrImg(GridViewRowEventArgs e)
      {
        ProductionMonitoring prodmon = e.Row.DataItem as ProductionMonitoring;
        if (prodmon != null)
        {
          if (prodmon.IsValid)
          {
            Image imgBtn;
            imgBtn = new Image();
            imgBtn.ID = "btnValider";
            imgBtn.ImageUrl = "~/images/webdev-ok-32x32.png";
            imgBtn.AlternateText = "Valider";
            e.Row.Cells[1].Controls.Add(imgBtn);
          }
          else
          {
            ImageButton imgBtn = new ImageButton();
            imgBtn.ID = "btnValider";
            imgBtn.ImageUrl = "~/images/webdev-remove-32x32.png";
            imgBtn.AlternateText = "Valider";
            imgBtn.CommandName = "validate";
            imgBtn.CommandArgument = ((ProductionMonitoring)e.Row.DataItem).Id.ToString();
            imgBtn.Command += new CommandEventHandler(this.CommandBtn_Click);
            e.Row.Cells[1].Controls.Add(imgBtn);
          }
        }
      }
    La fonction qui gère les command:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      protected void CommandBtn_Click(Object sender, CommandEventArgs e)
      {
        Debugger.Break();
        switch ((String)e.CommandName)
        {
          case "suppr":
            ProductionMonitoringManager.Instance.Delete(Convert.ToInt32((String)e.CommandArgument));
            Label1.Text = (String)e.CommandArgument;
            break;
          case "validate":
            //ProductionMonitoringManager.Instance.Validate(Convert.ToInt32((String)e.CommandArgument));
            Label1.Text = (String)e.CommandArgument;
            break;
          default:
            break;
        }
      }
    L'ImageButton de suppression fonctionne très bien.
    L'ImageButton de validation ne fonctionne pas. Là où on peut apercevoir le Debugger.Break(), en cliquant sur le bouton de validation je n'y passe jamais. Aussi quand je clique sur le bouton de validation au rechargement de ma page, toute cette colonne se vide, les boutons disparaissent.
    Je pense que cela est dû au fait que je les charges dynamiquement... Mais je ne comprends pas comment changer cela. J'ai fais plusieurs test en vain comme recharger le GridView relancer le Databind, peut-être que je ne l'ai pas fait au bon endroit.

    Est-ce que je crée mal mon ImageButton ?
    Faut-il recharger complétement mon GridView lors de chaque action sur ma page pour relancer les événements RowDataBound ou RowCreated ?


  2. #2
    Membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    59
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    personne n'a de piste?

Discussions similaires

  1. Evènement click sur item menu non déclenché
    Par clem_alain dans le forum ASP.NET
    Réponses: 0
    Dernier message: 06/04/2013, 14h58
  2. Evénement "click" sur contrôle ImageButton
    Par Nixar dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/12/2007, 22h50
  3. AddHandler sur un ImageButton dans un GridView
    Par Poussy-Puce dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/10/2007, 16h48
  4. Réponses: 4
    Dernier message: 03/12/2004, 11h18
  5. Lancement d'une commande sur un serveur Unix
    Par lper dans le forum Web & réseau
    Réponses: 2
    Dernier message: 29/07/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo