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û?