Posts Tagged ‘Gridview’

Geração de arquivos Excel em .Net – Usando GridView

terça-feira, abril 8th, 2008

Vamos abordar um assunto de muita utilidade para quem trabalha com desenvolvimento de sistemas, a geração de arquivos em Excel (.xls). Neste post vamos analisar a geração de arquivos .xls em ambiente web usando o GridView, uma forma prática e rápida de gerar relatórios simples. O método gerador recebe um DataTable com informações vindas de um banco de dados. Segue o código da classe geradora:

Imports System.IO
Imports System.Drawing
Imports System.Data
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
 
'''-----------------------------------------------------------------------------
''' Classe para geração de relatórios Excel. Utiliza o componente
''' System.Web.UI.WebControls.GridView para geração do arquivo .xls.
'''-----------------------------------------------------------------------------
Public Class ExcelReport
 
    ''' Nome do arquivo Excel
    Private _file As String
 
    ''' Objeto GridView
    Private gv As GridView
 
    ''' Construtor, recebe o nome do arquivo .xls como parâmetro
    ''' String contendo o nome do arquivo .xls a ser gerado.
    Public Sub New(ByVal file As String)
        Me._file = file
 
        ' Cria o GridView
        gv = New GridView()
 
        ' Formatação do GridView para que a planilha fique "zebrada"
        gv.HeaderStyle.ForeColor = Color.Black
        gv.AlternatingRowStyle.BackColor = Color.Yellow
        gv.RowStyle.BackColor = Color.White
 
    End Sub
 
    ''' Gera um arquivo Excel a partir de um DataTable.
    ''' Instância do objeto DataTable
    Public Sub DataTableToExcel(ByRef dt As DataTable)
 
        If dt.Rows.Count < 65536 Then
            Dim response As HttpResponse = HttpContext.Current.Response
            response.Clear()
            response.AddHeader("Content-Disposition", "attachment; filename=" + Me._file)
            response.ContentType = "application/vnd.ms-excel"
            Dim stringWrite As New StringWriter
            Dim htmlWrite As New HtmlTextWriter(stringWrite)
            gv.DataSource = dt
            gv.DataBind()
            gv.RenderControl(htmlWrite)
            response.Write(stringWrite.ToString)
            response.End()
        Else
            ' se tiver mais que 65536 linhas, dispara a exception
            Throw New Exception("Consulta deve conter menos que 65536 linhas")
        End If
    End Sub
End Class

Adicionar registros pelo rodapé do GridView

segunda-feira, agosto 27th, 2007

Sem dúvida alguma o controle GridView trouxe inúmeras melhorias sobre seu antecessor, o DataGrid. Mas um detalhezinho tem incomodado a comunidade de programadores .Net: quando não existem registros a exibir no GridView, ele simplesmente não exibe o controle, impossibilitando a inserção de registros através do rodapé quando não há nenhum registro, como muitos faziam no DataGrid.
Mas como na informática nada é impossível :) , meu amigo Marco Chilá conseguiu uma solução para essa "coisinha chata" do GridView e postou em seu blog. Vale a pena dar uma olhada na solução

Mudando cor de fundo da linha do GridView em tempo de execução

terça-feira, agosto 14th, 2007

Esses dias precisei de uma rotina que altera a cor de fundo da linha do GridView em tempo real. A princípio achei que fosse apenas atribuir uma string com a cor em hexadecimal (formato usado no HTML) para a propriedade BackColor do GridViewRow que já estaria resolvido, mas não deu certo pois a propriedade BackColor é do tipo System.Drawing.Color e não aceita strings. Dei uma fuçada nas classes do namespace System.Drawing e encontrei a solução:

e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF0000")

Coloquei o código no evento RowDatabound do GridView e deu certo. Fica aí a dica para os iniciantes em .Net como eu. ;)