Este ejemplo funciona como cualquier interfaz de correo electrónico, tipo Hotmail.
La idea es que cuentas con un GridView que muestra muchos registros. El usuario tiene la opción de seleccionar uno o varios de esos registros marcando un CheckBox que aparece en cada renglón. Después oprime un botón etiquetado con algún texto como “Eliminar los registros marcados” y todos los registros que marcó se borran.

Se le ahorra tiempo al usuario al permitirle eliminar varios registros de un solo paso.

Primero necesitas añadir a tu GridView un CheckBox para cada renglón:

  1. <asp:GridView ID="GVComparativos" runat="server" AutoGenerateColumns="False"
  2.        DataSourceID="ODSComparativos" AllowPaging="True" CellPadding="5"
  3.        GridLines="None" PageSize="30" DataKeyNames="identificadorCoti">
  4.     <Columns>
  5.         <asp:BoundField DataField="PersNombre" HeaderText="Nombre"
  6.            SortExpression="PersNombre" ReadOnly="true" />
  7.         <asp:BoundField DataField="PersEmail" HeaderText="E-mail"
  8.            SortExpression="PersEmail" ReadOnly="true" />
  9.         <asp:TemplateField HeaderText="Eliminar">
  10.             <ItemTemplate>
  11.                 <asp:CheckBox ID="chkEliminar" runat="server" />
  12.             </ItemTemplate>
  13.         </asp:TemplateField>
  14.         <asp:CommandField ShowEditButton="True" EditText="Editar" CancelText="Cancelar" UpdateText="Aceptar" />
  15.     </Columns>
  16. </asp:GridView>
  17. <br/>
  18. <asp:LinkButton ID="EliminarMarcados" runat="server" CausesValidation="False"> Eliminar los registros seleccionados</asp:LinkButton>

Toma nota del TemplateField que contiene un CheckBox llamado chkEliminar. Lo usaremos en el siguiente código, que va en el evento Click del LinkButton llamado EliminarMarcados:

  1. Protected Sub EliminarMarcados_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles EliminarMarcados.Click
  2.     Dim ListaDeIdsMarcados As String = ""
  3.     'Recorrer los renglones del GridView
  4.     Dim i As Integer
  5.     For i = 0 To GVComparativos.Rows.Count - 1
  6.         Dim ElCheckBox As CheckBox = CType(GVComparativos.Rows(i).FindControl("chkEliminar"), CheckBox)
  7.         If ElCheckBox.Checked Then
  8.             'Aqui encontramos cada CheckBox marcado
  9.             'En este ejemplo los pongo en un string y los despliego
  10.             'Pero en un caso de la vida real, llamarias a una funcion que los
  11.             'eliminaria utilizando el ID, que se guarda en DataKeys
  12.             ListaDeIdsMarcados = ListaDeIdsMarcados & GVComparativos.DataKeys(i).Value & "<br/>"
  13.         End If
  14.     Next
  15.     Response.Write(ListaDeIdsMarcados)
  16. End Sub

Listo, parece algo muy avanzado pero se logra de una forma relativamente sencilla.

7 comentarios sobre “Eliminación múltiple de registros de un GridView mediante CheckBoxes

  1. que onda Pablo, por que nos tienes tan abandonados?…

    esperemos que sea por chamba y no por salud!…

    te mando un gran abrazo y esperemos que pronto nos sigas aportando.

    cuidate man!… .Net Rules!

  2. Y que pasaria si se tiene activada la opcion de paginacion? si marcas checkbox en una pagina cuando cambies de pagina se pierde la seleccion.
    Que podemos hacer en ese caso?

  3. Utiliza un Hashtable
    http://www.w3schools.com/aspnet/aspnet_hashtable.asp

    con el uso de ViewState para que se guarde el contenido del Hashtable al cambiar de páginas.
    http://msdn.microsoft.com/en-us/magazine/cc300437.aspx

    Pon código para que cuando la persona cambie de página se llene tu Hashtable con los registros que están seleccionados. Como estás usando ViewState todo se irá guardando sin importar cuántas veces la persona cambia de página.

    Al final, cuando oprima el botón eliminar solamente recorres tu Hashtable y eliminas uno por uno con un ciclo.

    Suerte!

  4. Excelente, estoy de acuerdo que faltó explicar un poco lo del DataKey; se supone que en esa propiedad está guardad la clave de cada fila y con esa clave ir a la rutina de eliminar el registro actual.

Deja una respuesta

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


uno + = 5