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:GridView ID="GVComparativos" runat="server" AutoGenerateColumns="False"
- DataSourceID="ODSComparativos" AllowPaging="True" CellPadding="5"
- GridLines="None" PageSize="30" DataKeyNames="identificadorCoti">
- <Columns>
- <asp:BoundField DataField="PersNombre" HeaderText="Nombre"
- SortExpression="PersNombre" ReadOnly="true" />
- <asp:BoundField DataField="PersEmail" HeaderText="E-mail"
- SortExpression="PersEmail" ReadOnly="true" />
- <asp:TemplateField HeaderText="Eliminar">
- <ItemTemplate>
- <asp:CheckBox ID="chkEliminar" runat="server" />
- </ItemTemplate>
- </asp:TemplateField>
- <asp:CommandField ShowEditButton="True" EditText="Editar" CancelText="Cancelar" UpdateText="Aceptar" />
- </Columns>
- </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
:
- Protected Sub EliminarMarcados_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles EliminarMarcados.Click
- Dim ListaDeIdsMarcados As String = ""
- 'Recorrer los renglones del GridView
- Dim i As Integer
- For i = 0 To GVComparativos.Rows.Count - 1
- Dim ElCheckBox As CheckBox = CType(GVComparativos.Rows(i).FindControl("chkEliminar"), CheckBox)
- If ElCheckBox.Checked Then
- 'Aqui encontramos cada CheckBox marcado
- 'En este ejemplo los pongo en un string y los despliego
- 'Pero en un caso de la vida real, llamarias a una funcion que los
- 'eliminaria utilizando el ID, que se guarda en DataKeys
- ListaDeIdsMarcados = ListaDeIdsMarcados & GVComparativos.DataKeys(i).Value & "<br/>"
- End If
- Next
- Response.Write(ListaDeIdsMarcados)
- End Sub
Listo, parece algo muy avanzado pero se logra de una forma relativamente sencilla.
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!
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?
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!
Gracias mil, me fue muy util!
Hola Lenys, un gusto poder ayudar. Y gracias por dejar el comentario. Saludos!
muy buen aporte solo q falto lo mejor el codigo de la funcion q borra los registros, perdon pero soy principiante en esto. gracias
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.