Exportar GridView a Excel

En la página:

<div id="divExport">
    <asp:GridView ID="GVDatos" runat="server">
      .
      .
      .
   </asp:GridView>
</div>
<asp:Button ID="BExport" runat="server" Text="Exportar a Excel" OnClientClick="ExportDivDataToExcel()"/>

Script de cliente:

<script type="text/javascript">
    function ExportDivDataToExcel() {
        var html = $("#divExport")[0].children[0].innerHTML;
        html = $.trim(html);
        html = html.replace(/>/g, '&gt;');
        html = html.replace(/</g, '&lt;');
        $("input[id$='HdnValue']").val(html);
    }
</script>

Código de servidor (VB.NET):

    Private Sub BExport_Click(sender As Object, e As System.EventArgs) Handles BExport.Click
        Dim html As String = HdnValue.Value
        If html.Trim.Length = 0 Then
            Exit Sub
        End If
        ExportarExcel(html, "Datos")
    End Sub

    Public Sub ExportarExcel(html As String, archivo As String)
        html = html.Replace("&gt;", ">")
        html = html.Replace("&lt;", "<")

        HttpContext.Current.Response.ClearContent()
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" & archivo & "_" + DateTime.Now.ToString("M_dd_yyyy_H_M_s") & ".xls")
        HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
        HttpContext.Current.Response.Output.Write(html)
        HttpContext.Current.Response.End()

    End Sub

Se debe tener en cuenta que este método no funciona cuando <asp:Button ID="BExport"> se encuentra dentro de un UpdatePanel.

Posted in ASP.NET, javascript, jQuery, vb.net, Visual Basic, Visual Studio 2010 | Leave a comment

Validar página en Script de Cliente (javascript)

Para controlar si una página es válida desde un script de cliente utilizar:

Page_ClientValidate('VG');
if (!Page_IsValid)
    return;

donde VG es el ValidationGroup a procesar.

Posted in ASP.NET, javascript, Visual Studio 2008, Visual Studio 2010 | Leave a comment

Referencia a controles de una pagina ASP desde UserControl

Para hacer referencia a un control en la página que utiliza un control de usuario, desde el User Control utilizar el objeto Page:

Dim HF As HiddenField = Page.FindControl("HFIDSeguro")
Posted in ASP.NET, vb.net, Visual Basic, Visual Studio 2008, Visual Studio 2010 | Leave a comment

User Control y RequiredFieldValidator en asp.net

Para validar un Control de Usuario en ASP con RequiredFieldValidator se puede hacer lo siguiente:

<uc:UCRubro runat="server" ID="UCRubro1"></uc:UCRubro>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Se requiere Rubro"
     Display="None" ControlToValidate="UCRubro1:ucTBRubro" ValidationGroup="VG">
</asp:RequiredFieldValidator>
<asp:ValidatorCalloutExtender ID="ValidatorCalloutExtender1" runat="server" 
     TargetControlID="RequiredFieldValidator1" SkinID="Default">
</asp:ValidatorCalloutExtender>

En la propiedad ControlToValidate=”UCRubro1:ucTBRubro” la parte  ‘ucTBRubro’ es un TextBox visible en el control de usuario.

Posted in ASP.NET, Visual Studio 2008, Visual Studio 2010 | Leave a comment

Limpiar ReportViewer

Para efectuar la limpieza de un control ReportViewer utilizar el siguiente fragmento de código:

ReportViewer1.Reset()
ReportViewer1.LocalReport.Refresh()
Posted in ASP.NET, vb.net, Visual Studio 2008, Visual Studio 2010 | Leave a comment

ASP:NET recargar página (reload refresh page)

Para recargar una página desde una función de servidor se puede utilizar lo siguiente:

ScriptManager.RegisterStartupScript(Page, Me.GetType, "key", "window.location.reload(true);", True)

funciona inclusive dentro de masterPage.

Posted in ASP.NET, javascript, vb.net, Visual Basic, Visual Studio 2010 | Leave a comment

jQuery adicionar una fila a tabla

Una forma facil de agregar una fila a una tabla mediante jQuery es como sigue:

$(document).ready(function() {
   $("#BCond").click(function() {
        $("#tablaCon tr:first").clone().find("input").each(function() {
            $(this).attr({
                'id': function(_, id) { return id + i },
                'name': function(_, name) { return name + i },
                'value': '',
                'checked': false
            });
        }).end().appendTo("#tablaCon");
        i++;
    });
});

El boton se defin como:

<asp:ImageButton ID="BCond" runat="server" ImageUrl="~/Images/LayoutSelectRow.png"
 OnClientClick="return false;" UseSubmitBehavior="False" ToolTip="Agregar fila" />
Posted in ASP.NET, javascript, jQuery, Visual Studio 2008 | Leave a comment

jQuery Drag & Drop en GridView de ASP.NET

Para efectuar Drag & Drop en un GridView de una página ASP, podemos seguir el siguiente procedimiento.

Se requiere las siguientes librerías:

<script src="../Scripts/jquery-1.7.2.js" type="text/javascript"></script>
<script src="../Scripts/jquery-ui-1.8.21.custom.min.js" type="text/javascript"></script>

Definir la función ‘javascript’ pageLoad, se utiliza esta función cuando el Gridview está dentro de un UpdatePanel:

function pageLoad() {
            $('.block').draggable({ 
                helper: 'clone',
                opacity: 0.8
            }).droppable({
            accept: '.block',
                hoverClass: "ui-state-active",
                drop: function(event, ui) {
                    var droppedItem = $(ui.draggable).clone();
                    var toindex = $(this)[0].children[0].value;
                    fromindex = $(droppedItem).children("input")[0].value;
                    if (confirm('Desea mover el elemento seleccionado?')) {
                        var webMethod = 'Areas.aspx/MoverArea'
                        var parameters = "{'a':'" + toindex + "','Cod':'" + fromindex + "'}"
                        $.ajax({
                            type: "POST",
                            url: webMethod,
                            data: parameters,
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function(msg) {
                            if (msg.d.length>0)
                                alert(msg.d);
                            else
                                __doPostBack('MoverArea', '');
                            },
                            error: function(e) {
                                alert("Error");
                            }
                        });
                    }
                }
            });
        };

Crear los estilos:

.block
{
}
.ui-state-active
{
    background-color:#FF9933;
}

En el GridView definir la columna para arrastrar y soltar:

<ItemTemplate>
  <div class="block">
    <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("Cod_Area")%>' />
    <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/Move.png" Width="16" ToolTip="Mover el área" />
  </div>
</ItemTemplate>

En código de la página definir el método que efectuará la actualización:

 <WebMethod()> _
Public Shared Function MoverArea(ByVal a As String, ByVal Cod As String) As String
    Dim wClAreas As New ClAreas
    Return wClAreas.MoverArea(a, Cod)
End Function

Finalmente controlar el evento Page_Load de la página:

If Request.Params.Get("__EVENTTARGET") = "MoverArea" Then
  'GridView.databind()
End If
Posted in ASP.NET, javascript, jQuery, vb.net, Visual Basic, Visual Studio 2008 | Tagged , , , , | Leave a comment

QueryString con caracteres especiales (acentos, signos, etc.)

La mejor forma que he encontrado para mantener los caracteres especiales en un QueryString es utilizando dos funciones, una en javascript para codificar el URL (encodeURIComponent) y otra para decodificar el QueryString en el lado del servidor (Server.HtmlDecode()):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Not IsPostBack Then
      LTitulo.Text = Server.HtmlDecode(Request("Titulo"))
     TBFormula.Text = Server.HtmlDecode(Request("Formula"))
  End If
End Sub
Posted in ASP.NET, javascript, vb.net, Visual Basic, Visual Studio 2008, Visual Studio 2010 | Tagged , , | 54 Comments

IQueryable(Of Class)

Considerando que IQueryable(Of T) solo acepta un parámetro, es posible definir la interface como IQueryable(Of Class) de la siguiente forma:

    Dim Lista = From pc In _db.PedidoCotizacion _
    Where pc.Factura IsNot Nothing _
    Select New With {.NumPedido = pc.Pedido.NumPedido, _
             .NumFactura = pc.Factura.NumFactura, _
             .Cantidad = pc.Cantidad, _
             .SumaC = (From pid In _db.PedidoIngresoDetalle _
               Where pid.PedidoCotizacion.NumPedidoCotizacion = pc.NumPedidoCotizacion _
               Select pid.Cantidad).Sum}

    '**** Definición y llenado de IQueryable(Of Class)
    Dim Lista2 As IQueryable(Of ClPedidoFactura)
    If sCodEstado = "P" Then
        Lista2 = (From l In Lista Where l.Cantidad = l.SumaC _
         Select New ClPedidoFactura With {.NumPedido = l.NumPedido, .NumFactura = l.NumFactura}).Distinct
    Else
        Lista2 = (From l In Lista Where l.Cantidad <> l.SumaC Or l.SumaC Is Nothing _
         Select New ClPedidoFactura With {.NumPedido = l.NumPedido, .NumFactura = l.NumFactura}).Distinct
    End If
    '*****

    Dim query = From sp In _db.Pedido Where Lista2.Any(Function(s) s.NumPedido = sp.NumPedido) _
        Select New With {.NumPedido = sp.NumPedido, _
                     .FechaPedido = sp.FechaPedido, _
                     .CodMoneda = sp.Moneda.CodMoneda, _
                     .DescMoneda = sp.Moneda.DescMoneda, _
                     .CodProveedor = CType(sp.Proveedor.CodProveedor, Int32?), _
                     .NomProveedor = sp.Proveedor.NomProveedor, _
                     .CodEstado = sp.CodEstado, _
                     .UsrCrea = sp.UsrCrea, _
                     .FHCrea = sp.FHCrea, _
                     .UsrMod = sp.UsrMod, _
                     .FHMod = sp.FHMod}

La clase se define como:

Public Class ClPedidoFactura
    Private _NumPedido As Integer?
    Public Property NumPedido() As Integer?
        Get
            Return _NumPedido
        End Get
        Set(ByVal value As Integer?)
            _NumPedido = value
        End Set
    End Property
    Private _NumFactura As Integer?
    Public Property NumFactura() As Integer?
        Get
            Return _NumFactura
        End Get
        Set(ByVal value As Integer?)
            _NumFactura = value
        End Set
    End Property
End Class
Posted in LINQ, vb.net, Visual Studio 2008 | Leave a comment