51 votes

Obtenir DataKey valeurs dans GridView RowCommand

J'ai un GridView d'une DataKey, ce qui est l'ID de l'élément. Comment puis-je récupérer cette valeur à l'intérieur de l' RowCommand événement?

Cela semble fonctionner, mais je n'aime pas le casting d' LinkButton (ce que si une autre commande de tir à l'événement?), et je ne suis pas trop confiant au sujet de l' NamingContainer bits.

LinkButton lb = (LinkButton)e.CommandSource;
GridViewRow gvr = (GridViewRow)lb.NamingContainer;
int id = (int)grid.DataKeys[gvr.RowIndex].Value;

Je suis conscient que j'ai pu, au lieu de passer l'IDENTIFIANT comme l' CommandArgument, mais j'ai choisi d'utiliser DataKey de me donner plus de souplesse.

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.

89voto

Elph Points 1148

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:

CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'

Sur le Serveur de l'Événement

int rowIndex = int.Parse(e.CommandArgument.ToString());
string val = (string)this.grid.DataKeys[rowIndex]["myKey"];

31voto

Michiel Points 987

J'ai réussi à obtenir la valeur de la DataKeys l'aide de ce code:

dans le contrôle gridview j'ai ajouté

  DataKeyNames="ID" OnRowCommand="myRowCommand"

puis, dans ma ligne de commande de la fonction

protected void myRowCommand(object sender, GridViewCommandEventArgs e) 
{
    LinkButton lnkBtn = (LinkButton)e.CommandSource;    // the button
    GridViewRow myRow = (GridViewRow)lnkBtn.Parent.Parent;  // the row
    GridView myGrid = (GridView)sender; // the gridview
    string ID = myGrid.DataKeys[myRow.RowIndex].Value.ToString(); // value of the datakey 

    switch (e.CommandName)
    {
      case "cmd1":
      // do something using the ID
      break;
      case "cmd2":
      // do something else using the ID
      break;
    }
 }

Espérons que cette aide ;-)

5voto

Jay Points 41

il vous suffit de faire ceci:

string id = GridName.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X