Obtener checkbox seleccionados en GridView ASP.Net C#

Al agregar elementos seleccionables a una tabla, necesitamos saber cómo obtener checkbox seleccionados en GridView ASP desde c#.

Anteriormente vimos como agregar checkbox en un gridview, a ese código le agregaremos una propiedad que nos ayudara a capturar el check por su id.

El código del gridview quedaría como sigue:

<asp:GridView ID="gvTablaUno" runat="server" AutoGenerateColumns="false" ClientIDMode="Static" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chbItem" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Numero" HeaderText="Numero" />
        <asp:BoundField DataField="Mes" HeaderText="Mes" />
    </Columns>
</asp:GridView>

Se agrega únicamente la propiedad ClientIDMode como Static, hace que los id de todos los checkbox sean iguales.

Con el gridview agregado a la página aspx ahora veamos cómo realizar el conteo de los checkbox seleccionados.

Podría interesarte Cargar datos en GridView a partir de un DataTable en ASP.Net C#  

Obtener CkeckBox seleccionados

Para realizar el conteo de los checkbox necesitamos de un evento en el código, para ello agregamos un linkbutton.

<asp:LinkButton ID="lnkContar" runat="server" OnClick="lnkContar_Click">Contar</asp:LinkButton>

El botón ejecutara una acción en C# que realice el conteo, agregamos un label para mostrar el resultado.

<asp: Label ID="lblMensaje" runat="server"></asp:Label>

Ahora en el código C# buscamos el evento lnkContar_Click, fue creado al crear el botón.

protected void lnkContar_Click(object sender, EventArgs e)
{
}

Dentro de este evento agregamos todo el código necesario para capturar los checkbox seleccionados del gridview.

CheckBox chkMes;
int contador = 0;
foreach (GridViewRow grvRow in gvTablaUno.Rows)
{
    chkMes = (CheckBox)grvRow.FindControl("chbItem");
    if (chkMes.Checked)
    {
        contador++;
    }
}
  • Declaramos una variable de tipo checkbox y un contador de tipo entero para guardar el total de check seleccionados.
  • Con un ciclo foreach recorremos cada fila del gridview.
  • En la variable chkMes guardamos si el check de la fila recorrida esta seleccionada.
  • Validamos que la variable chkMes sea True.
  • Si el checkbox está seleccionado se le suma un 1 al contador.

Por último, en el label mostramos el número de checkbox seleccionados.

lblMensaje.Text = "En número de meses seleccionados son: " + contador;

Ejecutemos la aplicación, si notas que al seleccionar y oprimir el botón no realiza el conteo, entonces falta agregar una validación.

Como al dar clic en el botón hace un postback al código C#, provocando que se recargue el gridview, ¿Como lo solucionamos?

En el método que se ejecuta al cargar la página le indicamos que no se recargue la información al realizar un evento.

if (!Page.IsPostBack)
{
}

Dentro de esta condición agregamos el código para cargar el gridview, esto evitara que se borre la información al generar un evento.

Ahora ejecutemos la aplicación, seleccionemos algunos checkbox y clic en el botón, como resultado veremos el número de registros seleccionados.

Obtener checkbox seleccionados en GridView ASP

Podría interesarte Obtener fila del checkbox seleccionado  

7 Comments

  1. hola, buenas, muy bueno el post, como podría tomar los datos de cada linea de grid, seleccionada por el checkbox, por ejemplo un id que este en l row 2, en este caso cuenta los check, pero me gustaria tomar el id donde esta seleccionado, gracias

    1. Como en el ciclo se esta revisando fila por fila, dentro del if puedes determinar la ubicación de la celda que tomaras su contenido, de la siguiente manera:
      CheckBox chkMes;
      int contador = 0;
      string val = string.Empty;
      foreach (GridViewRow grvRow in gvTablaUno.Rows)
      {
      chkMes = (CheckBox)grvRow.FindControl(“chbItem”);
      if (chkMes.Checked)
      {
      val = grvRow.Cells[2].Text;
      contador++;
      }
      }

  2. Hola, explicas muy bien, pero tal y como dijiste, no me hace el conteo, lo hice paso a paso y no me pasa de la condiciòn, agradezco si puedes ayudarme. Un saludo

    1. Es posible que no estés agregando la validación del postback al cargar la pagina; en el Page_Load agregas colocas algo similar a esto:
      protected void Page_Load(…){
      if(!Page.IsPostBack)
      {
      //Codigo para cargar el GridView
      }
      }

      Me indicas si fue solucionado.

  3. Oye, muchas gracias, no sabes cuanto te agradezco, ¿Podría molestarte con otra cosa?
    Mi intención inicial fue capturar el id, mas o menos como lo hablaba fabio, el chico del comentario de arriba, pero también quiero guardar ese dato en una tabla que tengo en la base de datos, ya tengo la conexión y todo, solo no se con que valor guardar ese dato, te agradecería mucho, de verdad

Deja un comentario

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