net datakeys asp asp.net events gridview rowcommand datakey

asp.net - datakeys - Obtener valores de DataKey en GridView RowCommand



gridview selectedindexchanged get datakey value (5)

Tengo un GridView con un DataKey asociado, que es el ID del artículo. ¿Cómo recupero ese valor dentro del evento RowCommand ?

Esto parece funcionar, pero no me gusta el elenco de LinkButton (¿y si algún otro comando está activando el evento?), Y no estoy muy seguro del bit de NamingContainer .

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

Soy consciente de que podría pasar esa identificación como CommandArgument , pero elegí usar DataKey para darme más flexibilidad.

También soy consciente de que es posible usar un campo oculto para la ID, pero considero que es un truco que no quiero usar.


En el botón:

CommandArgument=''<%# Eval("myKey")%>''

En el evento del servidor

e.CommandArgument


Logré obtener el valor de las DataKeys usando este código:

En GridView agregué:

DataKeyNames="ID" OnRowCommand="myRowCommand"

Luego en mi función de comando de fila:

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; } }


Normalmente paso el RowIndex a través de CommandArgument y lo uso para recuperar el valor DataKey que quiero.

En el botón:

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

En el evento del servidor

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


puedes hacer esto:

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


foreach (GridViewRow gvr in gvMyGridView.Rows) { string PrimaryKey = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString(); }

Puede usar este código mientras realiza una iteración con foreach o para cualquier evento GridView como OnRowDataBound .

Aquí puede ingresar valores múltiples para DataKeyNames separando con coma DataKeyNames Por ejemplo, DataKeyNames="ProductID,ItemID,OrderID" .

Ahora puede acceder a cada una de las DataKeys al proporcionar su índice como se muestra a continuación:

string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString(); string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values[1].ToString(); string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values[2].ToString();

También puede usar Key Name en lugar de su índice para obtener los valores de la colección DataKeyNames como se muestra a continuación:

string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ProductID"].ToString(); string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ItemID"].ToString(); string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values["OrderID"].ToString();