Cómo crear un mensaje de confirmación para eliminar un registro en un GridView

En este post veremos cómo implementar un mensaje de confirmación con javascript para borrar un registro en un GridView.

Debes tener un GridView y un ObjectDataSource similares a estos:

  1. <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowPaging="True" AllowSorting="True" CellPadding="0" PageSize="30" GridLines="None" Width="100%" DataKeyNames="id">
  2.     <Columns>
  3.         <asp:BoundField DataField="id" HeaderText="ID" InsertVisible="False" SortExpression="id" />
  4.         <asp:BoundField DataField="usuario" HeaderText="Usuario" SortExpression="usuario" />
  5.  
  6.         <asp:TemplateField HeaderText="Eliminar">
  7.           <ItemTemplate>
  8.             <asp:LinkButton ID="LinkButton1"
  9.              CommandArgument='<%# Eval("id") %>'
  10.               CommandName="Delete" runat="server">
  11.               Eliminar</asp:LinkButton>
  12.           </ItemTemplate>
  13.         </asp:TemplateField>            
  14.        
  15.     </Columns>
  16.  
  17.     <EmptyDataTemplate>
  18.         No existen registros.
  19.     </EmptyDataTemplate>
  20. </asp:GridView>
  21. <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="{0}"
  22.    SelectMethod="ObtenParaGridView" TypeName="BLLComentario" DeleteMethod="BorraComentario">
  23.     <DeleteParameters>
  24.         <asp:Parameter Name="id" Type="Int32" />
  25.     </DeleteParameters>
  26. </asp:ObjectDataSource>

Ahora bien, para agregar el javascript necesario para realizar la confirmación, debemos valernos del evento GridView1_RowDataBound, así:

  1. Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
  2.         'Anadir javascript de confirmacion para cada linkbutton
  3.         If e.Row.RowType = DataControlRowType.DataRow Then
  4.             Dim Lb As LinkButton = e.Row.FindControl("LinkButton1")
  5.             Lb.Attributes.Add("onclick", "javascript:return confirm('¿Está seguro de que desea eliminar el registro con ID=" & DataBinder.Eval(e.Row.DataItem, "id") & "?')")
  6.         End If
  7.     End Sub

Y listo, obtendremos una confirmación como esta:

Confirmar con javascript eliminación de registro en GridView

Administración remota con Real VNC

Windows tiene una herramienta para administrar equipos de manera remota, llamada Remote Desktop. Funciona excelentemente con servidores de la familia Windows.

Si encuentras problemas con esta herramienta, o si no logras configurarla, existe una alternativa (no tan confiable pero gratuita) llamada Real VNC.

Puedes encontrar toda la información en esta liga:

http://www.realvnc.com/

Cómo exportar la información de un GridView a Excel

ARTÍCULO DESACTUALIZADO

Este artículo es algo viejo, encuentras una mejor forma de hacer la exportación en este otro artículo.


En algunas ocasiones queremos que toda la información que estamos desplegando con un GridView se exporte automáticamente a un archivo de Excel desde nuestra aplicación ASP.NET 2.

Para hacerlo, basta colocar un GridView vacío en nuestra página (puede ser uno diferente al que utilizas para mostrar la información en HTML).

  1. <asp:GridView ID="GridViewExcel" runat="server">
  2. </asp:GridView>

También necesitamos un botón que al ser presionado haga la exportación:

  1. <asp:LinkButton ID="ExportarAExcel" runat="server">Exportar a Excel</asp:LinkButton>

Por último, aquí está el código que hace la exportación:

  1. Protected Sub ExportarAExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ExportarAExcel.Click
  2.     Dim gv As GridView
  3.     gv = Page.Master.FindControl("form1").FindControl("Cuerpo").FindControl("GridviewExcel")
  4.     'Estoy obteniendo la información de mi Business Logic Layer, pero lo puedes hacer
  5.     'de la manera en la que estés acostumbrado
  6.     Dim Logica As New BLLUsers()
  7.     Dim DTable As DSEmpresa.usersDataTable
  8.     DTable = Logica.GetData()
  9.     gv.DataSource = DTable
  10.     gv.DataBind()
  11.     'Exportar a Excel
  12.     Response.Clear()
  13.     Response.Buffer = True
  14.     Response.ContentType = "application/vnd.ms-excel;"
  15.     Response.ContentEncoding = System.Text.Encoding.UTF7
  16.     Response.Charset = ""
  17.     Me.EnableViewState = False
  18.     Dim oStringWriter As System.IO.StringWriter = New System.IO.StringWriter
  19.     Dim oHtmlTextWriter As System.Web.UI.HtmlTextWriter = New System.Web.UI.HtmlTextWriter(oStringWriter)
  20.     'Me.ClearControls(dg)
  21.     gv.RenderControl(oHtmlTextWriter)
  22.     Response.Write(oStringWriter.ToString())
  23.     Response.End()
  24. End Sub
  25. Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
  26.     'Este override debe estar aqui ya que si no aparecera un error
  27.     'indicando que el Gridview debe estar dentro de un form runat=server
  28. End Sub

Actualización
Si por alguna razón obtienes el error:
RegisterForEventValidation can only be called during Render

intenta colocar EnableEventValidation="false" en la directiva de la página, de tal forma que quede algo así:

  1. <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPages/Principal.master" AutoEventWireup="false" CodeFile="Ejemplo.aspx.vb" Inherits="Ejemplo" EnableEventValidation="false" %>

Cómo pasar el id en un ButtonField de Gridview

Si tienes un GridView y quieres realizar una acción personalizada, basta con agregar una columna ButtonField, y pasar el iddel registro que seleccionaron.

El GridView:

  1. <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowPaging="True" AllowSorting="True" CellPadding="0" PageSize="30" GridLines="None" Width="100%" DataKeyNames="id">
  2.     <Columns>
  3.         <asp:BoundField DataField="id" HeaderText="ID" InsertVisible="False" SortExpression="id" />
  4.         <asp:BoundField DataField="status" HeaderText="Status" SortExpression="status" />
  5.         <asp:ButtonField CommandName="ConmutarStatus" HeaderText="Conmutar status" Text="Conmutar" ButtonType="Link" />
  6.    </Columns>
  7. </asp:GridView>

Nota la propiedad DataKeyNames. La establecí en id porque ese es el nombre de mi columna llave en la tabla.

Cada vez que se hace clic en la columna ButtonField, se dispara el evento RowCommand y es ahí donde debemos realizar la acción.

  1. Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
  2.         If e.CommandName = "ConmutarStatus" Then
  3.  
  4.             Dim indice As Integer = Convert.ToInt32(e.CommandArgument)
  5.             Dim id As Integer = GridView1.DataKeys(indice).Value
  6.             'Ahora en id tenemos el id de nuestra tabla.
  7.             'Podemos realizar cualquier acción con este valor.
  8.  
  9.  
  10.         End If
  11.     End Sub

Forzar puerto 443 y deshabilitar puerto 80 para uso de un certificado SSL

Cuando compras un Certificado de Seguridad SSL, el sitio web que proteges se accede mediante una dirección como esta:

https://seguro.ejemplo.com

La “s” indica al navegador que se va a utilizar una conexión segura y ésta se hace por medio del puerto 443, el cual es el default para HTTPS/SSL.

Ahora bien, si no configuras nada más en tu Sitio Web y alguien teclea esta dirección:

http://seguro.ejemplo.com

notarás que todavía se puede acceder a tu aplicación, pero se está accediendo sin utilizar la seguridad que provee el certificado, lo cual es incorrecto. Lo más recomendable es indicarle a IIS que force la comunicación segura.

Para esto, abre las propiedades de tu Sitio Web en IIS y en la pestaña Directory Security, bajo el título Secure Communications oprime el botón Edit.

Ahora marca la opción Require Secure Channel (SSL) y marca también la opción Require 128-bit encryption si tu Certificado es de 128 bits.

SSL

Listo, ahora si intentas entrar a:

http://seguro.ejemplo.com

verás que el navegador te envía el siguiente error:

The page must be viewed over a secure channel
 The page you are trying to access is secured with Secure Sockets Layer (SSL).
 Please try the following:
 Type https:// at the beginning of the address you are attempting to reach and press ENTER.
 HTTP Error 403.4 - Forbidden: SSL is required to view this resource.
 Internet Information Services (IIS)