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 :

Récupération de la valeur de la clef dans le RowCommand d'un GridView


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 337
    Points : 120
    Points
    120
    Par défaut Récupération de la valeur de la clef dans le RowCommand d'un GridView
    Bonjour mesdames et monsieur,
    A plusieurs reprises, j'ai toujours utilisé cette méthode de programmation qui a de tout temps marché.
    Dans mon dernier projet, je rencontre des difficultés à récupérer la valeur de la clef primaire "Id".

    En asp
    Code asp : 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
    <asp:GridView ID="GridView0" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Width="100%" DataSourceID="SqlDataSource0" CssClass="GridviewLigne" ShowHeader="false" PageSize="18" DataKeyNames="Id">
                            <Columns>
                                <asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="GridExtreme">
                                    <ItemTemplate>
                                        <asp:CheckBox ID="chk_supprime" runat="server" />
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="Valeur" SortExpression="Valeur" ReadOnly="True" ItemStyle-CssClass="Nom" />
                                <asp:BoundField DataField="Profil" SortExpression="Profil" ReadOnly="True" ItemStyle-CssClass="Profil" />
                                <asp:BoundField DataField="Email" SortExpression="Email" ReadOnly="True" ItemStyle-CssClass="Email" />
                                <asp:BoundField DataField="Tel" SortExpression="Tel" ReadOnly="True" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="Tel" />
                                <asp:BoundField DataField="NomUtilisateur" SortExpression="NomUtilisateur" ReadOnly="True" ItemStyle-CssClass="Nu" />
                                <asp:CheckBoxField DataField="Actif" SortExpression="Actif" ReadOnly="True" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="Actif" />
                                <asp:ButtonField ButtonType="Image" CommandName="Modifier" ImageUrl="~/Images/a_bt_grid_modifier.png" ItemStyle-CssClass="GridviewButton" ItemStyle-HorizontalAlign="Center" />
                            </Columns>
                        </asp:GridView>
                        <asp:SqlDataSource
                            ID="SqlDataSource0"
                            runat="server"
                            ConnectionString="<%$ ConnectionStrings:HI_CNX %>"
                            SelectCommand="SELECT R1.*,R2.Valeur as Profil FROM a_utilisateur_parent as R1 inner join a_profil_parent as R2 on R1.ProfilId=R2.Id"></asp:SqlDataSource>

    en code behind vb.net
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Protected Sub GridView0_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView0.RowCommand
            If e.CommandArgument.RowType <> DataControlRowType.DataRow Then Exit Sub
            Dim Idx As Integer = Convert.ToInt32(e.CommandArgument)
            Dim CP As String = GridView0.DataKeys(Idx)("Id")
     
            Select Case e.CommandName
                Case "Modifier"
                    Response.Redirect(UrlApplication() & "Utilisateur/maj.aspx?Id=" & CP)
                Case Else
                    Actualiser()
            End Select
        End Sub

    En cliquant sur le cellule "Modifier" du GridView, j'obtiens l'erreur suivante:
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    à la ligne
    Dim CP As String = GridView0.DataKeys(Idx)("Id")
    C'est la première fois que le GridView me joue ce tour et je suis désemparé. A quoi cela est-il dû?

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Ne manquerait-il pas un BoundField avec DataField="Id" (et potentiellement Visible à False si tu ne veux pas qu'elle s'affiche) ?

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 337
    Points : 120
    Points
    120
    Par défaut
    Il fallait ajouter l'expression <% #eval(Id) %> à la colonne buttonfield dans asp.net
    Et ajouter dans le code behind
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ValeurClef as integer = e.argumentcommand

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/11/2009, 14h54
  2. [VxiR2] Récupération de la valeur d'un champ dans Planification
    Par Razafindrazaka dans le forum Webi
    Réponses: 4
    Dernier message: 26/10/2009, 10h19
  3. récupération de la valeur d'une variable dans instruction select
    Par nicole.altuzarra dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/01/2009, 12h07
  4. Réponses: 4
    Dernier message: 14/01/2009, 10h45
  5. Réponses: 2
    Dernier message: 04/03/2007, 16h59

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