Bienvenidos

Recuerda que tus comentarios son importantes y recuerda agradecer si te fue útil algun artículo publicado aquí.

L1f3 15 a D@nc3 Flo0r

lunes, 5 de octubre de 2009

Obtener el datakey value de una fila en un gridview

Se me present el caso en el que en un grid view debia poner un boton para eliminar esa fila y por consiguiente borrar ese valor de la base de datos.

Para esto ponemos en el gridview un botón y en el CommandName le ponemos "Eliminar".

El siguiente paso es hacer que cuando clikemos ese botón que aparecerá en cada fila del gridview, nos elimine ese valor.

Para esto en el Evento RowCommand del gridview ponemos lo siguiente:


if (e.CommandName == "Eliminar")

{


string valor;


int index;


 

index = int.Parse(e.CommandArgument.ToString());

valor = gridview1.DataKeys[index].Value.ToString();


 

TABLA.Delete(Convert.ToInt32(valor));

gridview1.DataBind();

}


 

La primera linea busca el comando Eliminar como le pusimos al botón.

Capturamos la fila en la que esta el boton que clicamos y buscamos el datakey value de esa fila

Y lo demas es simplemente borrarlo de la BD.


 

Recuerda declarar el campo DataKey en el GridView


 

Enjoy!

10 comentarios:

Raul dijo...

La solución está perfecta. Pero de igual manera se recomienda usar el sender object del evento RowCommand para obtener un ID o algun valor relevante, tal y como lo pondriamos en el datakey, utilizando la propiedad CommandArgument (Que al igual que el datakey esta mapeado a alguna propiedad del obj bindeado). Ignorando las ventajas/desventajas de cada "approach" semanticamente hablando se ve mas elegante y mas facil de entender.

Unknown dijo...

Hola, tengo una duda: He puesto un BotonField en ItemTemplate de un GridView.Quiero que cuando se pulse ese botón, se actualice un campo de esa fila en la base de datos. Mediando el evanto RowCommand del Grid detecto qué botón se ha pulsado. Pero la pregunta es: ¿Qué tengo que poner en la propiedad CommandArgument del control Button para que me devuelva el indice de la fila?
Gracias de antemano.

Anónimo dijo...

Hola. Tengo un botón ButtonField en el ItemTemplado de un GridView. Mediante el evanto RowCommand obtengo qué botón se ha pulsado. Con el CommandArgument obtengo el índice de la fila en que se ha pulsado el botón. La pregunta es: ¿Qué tengo que poner en la propiadad CommandArgument para utilizarlo luego en el evanto RowCommand y acceder al valor de cualquier celda de esa fila, por ejemplo la ID de la fila? Gracias de antemano

Unknown dijo...

Hola. Tengo un botón ButtonField en el ItemTemplado de un GridView. Mediante el evanto RowCommand obtengo qué botón se ha pulsado. Con el CommandArgument obtengo el índice de la fila en que se ha pulsado el botón. La pregunta es: ¿Qué tengo que poner en la propiadad CommandArgument para utilizarlo luego en el evanto RowCommand y acceder al valor de cualquier celda de esa fila, por ejemplo la ID de la fila? Gracias de antemano

Blog de Tips Rápidos de Programación dijo...

Mira este post. es con un datalist pero talvez te pueda ayudar

http://recuerdaprogramacionrapido.blogspot.com/2009/10/boton-dentro-de-un-datalist.html

No se si entiendo bien tu pregunta pero para acceder a una celda del grid lo haces asi:

Gridview1.SelectedRow.Cells[1].Text

el indice seria el numero de la celda sabiendo que la primera es el 0.

Juan Diego dijo...

Gracias, una solución bastante práctica ... saludos!!

coco dijo...

hola amigo te falta agregarle en el codigo html donde se declara el boton que representa el CommandName para hacer el OnRowCommand la propiedad

CommandArgument = "<%# ((GridViewRow)Container).RowIndex%>"

porque sino salta el error. me paso mil veces hasta que encontre esta solucion

coco dijo...

hola amigo te falta agregarle en el codigo html donde se declara el boton que representa el CommandName para hacer el OnRowCommand la propiedad

CommandArgument = "<%# ((GridViewRow)Container).RowIndex%>"

porque sino salta el error. me paso mil veces hasta que encontre esta solucion

Anónimo dijo...

la opcion que dice TABLA..de donde sale

Blog de Tips Rápidos de Programación dijo...

Ese sería el nombre de tu DataTable que va a estar en tu Dataset. Ahi pones la tabla a la que le quieres eliminar el registro que ya debe existir wn tu dataset