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:
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.
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.
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
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
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.
Gracias, una solución bastante práctica ... saludos!!
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
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
la opcion que dice TABLA..de donde sale
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
Publicar un comentario