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".
Code:
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> |
Citation:
en code behind vb.net
Code:
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:
Citation:
L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
à la ligne
Citation:
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û?