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 :

[C#] GridView RowCommand


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut [C#] GridView RowCommand
    Bonjour,

    J'ai crée une GridView comprenant 3 colonnes :

    - 2 CommandField = 2 boutons image
    - 1 BoundField (Clé)

    La finalité est d'arriver à rediriger vers :

    - Page1 lorsque j'appuie sur le 1er CommandField
    - Page2 lorsque j'appuie sur le 2eme CommandField

    NB : les liens Page1 & Page2 contiennent la valeur de la Clé (BoundField) suivant l'index de l'enregistrement selectionné (GridView.SelectedValue).

    Voici le code executé à l'initialisation du GridView :

    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
     
    // Initialisation GridView Suivi
    protected void GridView_Suivi_Init(object sender, EventArgs e)
    {
     
            GridView gv = (GridView)sender;
     
            gv.Columns.Clear();
     
            cfTable = new CommandField();
            cfTable.ButtonType = ButtonType.Image;
            cfTable.ShowSelectButton = true;
            cfTable.SelectText = "editer";
            cfTable.SelectImageUrl = "~/images/select.gif";
            gv.Columns.Add(cfTable);
            cfTable = null;
     
            cfTable = new CommandField();
            cfTable.ButtonType = ButtonType.Image;
            cfTable.ShowSelectButton = true;
            cfTable.SelectText = "utilisateurs associés";
            cfTable.SelectImageUrl = "~/images/icon_user.gif";
            cfTable.HeaderStyle.Width = 20;
            gv.Columns.Add(cfTable);
            cfTable = null;
     
            bfTable = new BoundField();
            bfTable.DataField = "CodeApplication";
            bfTable.HeaderText = "Application";
            bfTable.SortExpression = "CODE_APPLICATION";
            bfTable.ReadOnly = true;
            bfTable.ItemStyle.Width = 205;
            gv.Columns.Add(bfTable);
            bfTable = null;
     
    }
    Lorsque j'intercepte le clic sur un des boutons (CommandField) du GridView, j'arrive à récupérer la valeur de la clé GridView.SelectedValue mais je n'arrive pas à determiner sur quel boton a eu lieu le clic.

    Voici le code permettant d'intercepter le clic sur 2 evennements du GridView :

    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
     
    protected void GridView_Suivi_RowCommand(object sender, GridViewCommandEventArgs e)
        {
     
            GridView gvtest1 = (GridView)sender;
     
            // Comment savoir quel bouton a reçu le clic
            // Si 1er CommandField -> Redirection Page1
     
        }
     
        protected void GridView_Suivi_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridView gvtest2 = (GridView)sender;
     
           // Comment savoir quel bouton a reçu le clic
           // Si 2eme CommandField -> Redirection Page2
        }
    Carlos

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut Utilise des ButtonField
    Pour faire ce que tu veux, j'utiliserai plutot des buttonField.

    Tu les crée à peu près de la même façon, avec un CommandName spécifique (USER et EDITER par exemple).

    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
     
    // Initialisation GridView Suivi
    protected void GridView_Suivi_Init(object sender, EventArgs e)
    {
     
            GridView gv = (GridView)sender;
     
            gv.Columns.Clear();
     
            cfTable = new ButtonField();
            cfTable.ButtonType = ButtonType.Image;
            cfTable.Text = "editer";
            cfTable.commandName = "EDITER";
            cfTable.ImageUrl = "~/images/select.gif";
            gv.Columns.Add(cfTable);
            cfTable = null;
     
            cfTable = new ButtonField();
            cfTable.ButtonType = ButtonType.Image;
            cfTable.Text = "utilisateurs associés";
            cfTable.commandName = "USER";
            cfTable.ImageUrl = "~/images/icon_user.gif";
            cfTable.HeaderStyle.Width = 20;
            gv.Columns.Add(cfTable);
            cfTable = null;
     
            bfTable = new BoundField();
            bfTable.DataField = "CodeApplication";
            bfTable.HeaderText = "Application";
            bfTable.SortExpression = "CODE_APPLICATION";
            bfTable.ReadOnly = true;
            bfTable.ItemStyle.Width = 205;
            gv.Columns.Add(bfTable);
            bfTable = null;
     
    }
    Dans ton rowCommand, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected void GridView_Suivi_RowCommand(object sender, GridViewCommandEventArgs e)
        {
     
            if e.commandName = "USER" ...
            if e.commandName = "EDITER" ...
     
        }
    Plus facile non ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut On y arrive presque...
    Effectivement, en utilisant un ButtonField on arrive à distinguer le controle d'origine grace à e.commandName. Merci pour ton aide.

    Par contre je n'arrive plus à acceder à la valeur du BoundField (datakey) qui était accessible avec un CommandField etla gestion de l'évennement GridView_SelectedIndex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected void GridView_Suivi_SelectedIndexChanged(object sender, EventArgs e)
        {
     
            GridView gvtest = (GridView)sender;
     
            string strCle = gvtest.SelectedValue.ToString();
    Mon besoin est de distinguer le controle qui effectue le clic (ButtonField + Evennement GridView RowCommand = OK) et de récupérer la valeur de la clé selectionnée (CommandField + Evennement GridView SelectedIndex)

    Il y a-t-il un moyen de répondre à ces 2 besoins simultanément ?

    Carlos

  4. #4
    Membre émérite Avatar de cubitus91
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 726
    Par défaut
    Salut ,
    voila ce que tu cherche ca pourra t aider !!!
    http://msdn2.microsoft.com/fr-fr/lib...ld(VS.80).aspx

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 123
    Par défaut
    j'espère que ça va t'aider:
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

    int index;
    string cle;
    if (e.CommandName == "USER")
    {
    // "index" représente l'indice de la ligne de la gridview
    index = Convert.ToInt32(e.CommandArgument);
    // instancier une ligne de la gridview
    GridViewRow row_grid = GridView1.Rows[index];
    // récupérer la valeur de la premiere cellule de la ligne
    cle = row_grid.Cells[0].Text;
    ...
    }

    if (e.CommandName == "EDITER")
    {
    // "index" représente l'indice de la ligne de la gridview
    index = Convert.ToInt32(e.CommandArgument);
    // instancier une ligne de la gridview
    GridViewRow row_grid = GridView1.Rows[index];
    // récupérer la valeur de la premiere cellule de la ligne
    cle = row_grid.Cells[0].Text;
    ...
    }

    }
    bon codage

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut Bravo ! et surtout merci !!!!
    Le code fonctionne parfaitement. Merci infiniment !

    Voici le code final :
    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
     
    protected void GridView_Suivi_RowCommand(object sender, GridViewCommandEventArgs e)
        {
     
            int index = Convert.ToInt32(e.CommandArgument);
     
            GridView gvtest = (GridView)sender;
     
            string strCle;
     
            switch (e.CommandName)
            {
                case "user":
     
                    strCle = gvtest.Rows[index].Cells[3].Text; // la clé correspond à la 4ème colonne
     
     
                    Response.Redirect("~/appli/suivi.aspx?item=membre&type=suivi&application=" + strCle);
     
                    break;
     
                case "role":
     
                    strCle = gvtest.Rows[index].Cells[3].Text;
     
                    Response.Redirect("~/appli/suivi.aspx?item=role&type=suivi&application=" + strCle);
     
                    break;
     
            } // Fin switch (e.CommandName)
     
        } // Fin protected void GridView_Suivi_RowCommand(object sender, GridViewCommandEventArgs e)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme rowcommand d'un gridview
    Par Msysteme dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/01/2015, 22h20
  2. Problème RowCommand GridView
    Par Emilien69 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/09/2009, 13h46
  3. GridView, UpdatePanel, Templatefield et RowCommand
    Par osyks dans le forum ASP.NET
    Réponses: 0
    Dernier message: 20/07/2009, 11h45
  4. RowCommand d'une GridView se répete 2 fois
    Par grominet_79 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/07/2009, 15h52
  5. Gridview et rowcommand
    Par Poulain dans le forum ASP.NET
    Réponses: 5
    Dernier message: 07/05/2007, 20h02

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