Evento RowCommand de gridview ASP.Net

A partir de los registros de un gridview de ASP.Net es posible generar un evento RowCommand para editar, actualizar o eliminar registros.

Utilizando este método podemos obtener el número de índice del registro al que le dimos clic y obtener los datos.

Crear gridview

Como ya habíamos visto como crear un gridview anteriormente, pasaremos a agregar un elemento para provocar el evento.

Voy a agregar un botón al gridview de la siguiente manera.

<asp:GridView ID="gvTablaUno" runat="server" AutoGenerateColumns="false" OnRowCommand="gvTablaUno_RowCommand">
    <Columns>
        <asp:BoundField DataField="Numero" HeaderText="Numero" />
        <asp:BoundField DataField="Nombre" HeaderText="Nombre completo" />
        <asp:ButtonField Text="Editar" CommandName="Editar" />
    </Columns>
</asp:GridView>
  • Se agrega la propiedad OnRowCommand con valor personalizado “gvTablaUno_RowCommand” (obligatorio colocarlo en la etiqueta).
  • Agregar un buttonField con su propiedad CommandName y valor personalizado.

Agregar un buttonField con su propiedad CommandName y valor personalizado.

Podría interesarte Obtener checkbox seleccionados en GridView ASP.Net C#  

Agregar evento RowCommand de gridview

Abrimos el código C# de la página aspx al que le colocamos el gridview; creamos el método que se llamara desde el grid al oprimir el botón.

Con el siguiente método se agrega el evento RowCommand que es ejecutado por la propiedad OnRowCommand del grid.

protected void gvTablaUno_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
}

El nombre del método debe ser el mismo al valor de la propiedad OnRowCommand del grid.

Agregamos una condición para determinar el nombre del comando que se ha invocado.

if (e.CommandName == "Editar")
{
}

Se hace la comparación del CommandName del botón con un valor string, de esta manera podemos ejecutar diferentes acciones dependiendo del botón seleccionado.

Por último, obtengamos el índice del registro al que le dimos clic en el botón que le pertenece, podemos utilizar un código como sigue.

protected void gvTablaUno_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
    if (e.CommandName == "Editar")
    {
        int index = int.Parse(e.CommandArgument.ToString());
        lblMensaje.Text = "Indice del registro: "+index;
    }
}

Ejecuta la aplicación web, da clic en el botón de alguno de los registros, mediante un punto de interrupción puedes verificar el valor del índice.

Evento RowCommand de gridview ASP

En mi caso agregue un label para visualizar en la interfaz el número del índice del registro, los valores del índice comienzan a partir de 0.

Podría interesarte Modificar contenido de GridView en tiempo de ejecución en ASP.Net C#  

2 Comments

  1. Hola Gerardo! Muy buen artículo el tuyo. Yo tengo una pregunta, estoy implementando esta parte basado en tu artículo y me ha funcionado muy bien, sin embargo me estoy enfrentando a que, cuando hago un rowcommand, en automático se genera un postback y el gridview se vuelve a cargar.

    Esto no tendría mayor complicación si se tratase de un gridview con 5 o 6 registros, pero cuando el gridview tiene 50 registros (o más) cada vez que se presiona un botón y entra el row command, en automático al cargarse el grid de nuevo regresa al principio (al top del grid) y el usuario tiene que volver a bajar (con el scroll) y buscar el registro en el que se quedo y continuar con su actividad. ¿Existe alguna propiedad del GridView para que cuando entre al rowcommand, el mismo gridview sepa que fila (o registro) mando el postback y regrese el foco a él? No sé si me explique, me sería de mucha ayuda alguna respuesta tuya.

    Saludos!

    1. Que tal Antonio, fue la misma pregunta que me hice hace un tiempo al trabajar con grids.
      lo que hice fue colocar el contenido de la pagina en un UpdatePanel, al hacer el postback mediante los botones y recargar el grid, este se ubica al registro que acabo de editar (aunque al final del scroll).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *