Obtenir DataKey valeurs dans GridView RowCommand
J'ai un GridView
avec un associé DataKey
, qui est l'ID de l'élément.
Comment puis-je récupérer cette valeur à l'intérieur de la RowCommand
événement?
Cela semble fonctionner, mais je n'aime pas le casting de LinkButton
(ce que si une autre commande de tir à l'événement?), et je ne suis pas trop confiant au sujet de la NamingContainer
peu.
LinkButton lb = (LinkButton)e.CommandSource;
GridViewRow gvr = (GridViewRow)lb.NamingContainer;
int id = (int)grid.DataKeys[gvr.RowIndex].Value;
Je suis conscient que je pourrait passer que l'ID que le CommandArgument
, mais j'ai choisi d'utiliser DataKey
pour me donner plus de flexibilité.
Je sais aussi qu'il est possible d'utiliser un champ caché pour l'ID, mais je pense qu'un hack que je ne veux pas utiliser.
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude de passer la RowIndex via CommandArgument et de l'utiliser pour récupérer le DataKey de la valeur que je veux.
Sur le Bouton:
Sur le Serveur de l'Événement
Dim rowIndex As Integer = Integer.Parse(e.CommandArgument.ToString()) Dim val As String = Me.grdDatosPadres.DataKeys(rowIndex).Item("Field").ToString
J'ai réussi à obtenir la valeur de la DataKeys l'aide de ce code:
Dans le contrôle GridView j'ai ajouté:
Puis, dans ma ligne de commande de la fonction:
Vous pouvez utiliser ce code tout en faisant une itération avec
foreach
ou pour toute GridView événement commeOnRowDataBound
.Ici, vous pouvez entrer plusieurs valeurs pour
DataKeyNames
en les séparant par des virgules,
. Par exemple,DataKeyNames="ProductID,ItemID,OrderID"
.Vous pouvez maintenant accéder à chacune des
DataKeys
en fournissant son index comme ci-dessous:Vous pouvez également utiliser le Nom de la Clé à la place de son index pour obtenir les valeurs de
DataKeyNames
collection comme ci-dessous:tu peux faire ça:
CommandArgument
n'est pas l'ID de ligne, c'est une chaîne vide.Sur le Bouton:
Sur le Serveur de l'Événement