Eliminación múltiple de registros de un GridView mediante CheckBoxes


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:

ASP:
  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.  
  16.     </Columns>
  17. </asp:GridView><br/><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:

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

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

  1. #1 by Omar Del Toro M. on 12 Noviembre 2008 - 16:18

    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. #2 by ffffff on 27 Mayo 2009 - 23:12

    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. #3 by Pablo Viale on 28 Mayo 2009 - 9:37

    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. #4 by Lenys Cespedes on 29 Septiembre 2010 - 20:04

    Gracias mil, me fue muy util!

  5. #5 by Pablo Viale on 29 Septiembre 2010 - 21:36

    Hola Lenys, un gusto poder ayudar. Y gracias por dejar el comentario. Saludos!

  6. #6 by rafael on 28 Enero 2012 - 10:10

    muy buen aporte solo q falto lo mejor el codigo de la funcion q borra los registros, perdon pero soy principiante en esto. gracias

(No será publicado)