Si vous pouvez être sûr que l'ordre des éléments dans votre source de données n'a pas changé, vous pouvez utiliser la propriété CommandArgument de CommandEventArgs.
Cependant, une méthode plus robuste consiste à utiliser les propriétés DataKeys/SelectedDataKey de GridView. Le seul inconvénient est que votre commande doit être de type "Select" (ainsi, par défaut, RowCommand n'aura pas accès à DataKey).
En supposant que vous avez une certaine unicité dans les entités composant votre liste, vous pouvez définir un ou plusieurs noms de propriété de clé dans la propriété DataKeys de GridView. Lorsque l'élément sélectionné dans GridView est défini, vous pouvez récupérer vos valeurs de clé et localiser l'élément dans votre liste de liens. Cette méthode vous permet d'éviter que la position ordinale de GridView ne corresponde à la position ordinale de votre élément dans la source de données.
Exemple:
<asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True"
DataKeyNames="Name" onrowcommand="GridView1_RowCommand1"
onselectedindexchanged="GridView1_SelectedIndexChanged">
</asp:GridView>
Ensuite, le code-behind (ou en ligne) pour la page serait quelque chose comme:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
// Value is the Name property of the selected row's bound object.
string foo = GridView1.SelectedDataKey.Value as string;
}
Un autre choix serait d'aller spéléo dans la collection Lignes de GridView, récupérer des valeurs une colonne à la fois en obtenant des valeurs de contrôle, mais ce n'est pas recommandé, sauf si vous devez le faire.
Espérons que cela aide.