Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Personalizando o CrystalReportViewer

Os relatórios são parte importante de uma aplicação e a utilização dos Crystal Reports, disponíveis na maioria nas versões do Visual Studio 2005, ajuda muito neste processo. É uma ferramenta poderosa, embora com diversas limitações na versão .NET, mas mesmo assim com inúmeras possibilidades e simplicidade de utilização.

O CystalReportViewer é uma ferramenta do Crystal Report que permite pré-visualizar o relatório antes de ser impresso ou exportado para diversos formatos disponíveis, como é o caso de *.pdf, *.xls, *.doc, etc. No entanto o CystalReportViewer é totalmente em Inglês e não existe a possibilidade de modifica-lo em design mode ou modo de edição.

O CystalReportViewer é composto pelos seguintes componentes:

     ReportGroupTree – Árvore de relatórios
     PageView – Onde se encontra o relatório
     Splitter – Divisão entre o PageView e ReportGroupTree
     StatusBar – Barra onde são mostradas algumas informações sobre o relatório
     ToolStrip – Barra de Ferramentas onde se encontram os botões

alt

Em modo runtime ou quando o programa está a executar, é possível personalizar grande parte dos componentes do CystalReportViewer. Ficam aqui alguns exemplos de personalizações possíveis, mostrando um pouco o que se pode e como se pode modificá-lo.

Esconder o botão “Main Menu”

Os relatórios aparecem por defeito com um TabControl e com uma TabPage por cada relatório visível. Estas TabPages servem para selecionar o relatório mas na grande maioria das vezes existem apenas um relatório. Nestes casos podemos “esconder” o botão e embora não seja possível na realidade esconder, é possível reduzir o tamanho de modo a este não ser visível.

 

        ' Faz um ciclo em todos os controlos do CrystalReportViewer1
        For Each ctrl As Control In Me.CrystalReportViewer1.Controls

            ' Se o controlo for do tipo PageView, ou seja, onde
            ' se encontra os relatórios e o TabControl
            If TypeOf ctrl Is PageView Then   

                ' Atribui a uma variável o primeiro controlo
                Dim tabCtrl As TabControl = CType(ctrl.Controls(0), TabControl)

                ' Define o tamanho como fixo
                tabCtrl.SizeMode = TabSizeMode.Fixed

                ' Define o tamanho em altura para 1
                tabCtrl.ItemSize = New Size(0, 1)

                Exit For

            End If

        Next

Alterar o nome do botão “Main Menu”

Este exemplo é semelhante ao anterior, apenas mudando o tipo de controlo. Desta vez, e para alterar o nome de “Main Menu” para outro à nossa escolha, devemos selecionar uma TabPage do TabControl.

        ' Faz um ciclo em todos os controlos do CrystalReportViewer1
        For Each ctrl As Control In Me.CrystalReportViewer1.Controls

            ' Se o controlo for do tipo PageView, ou seja, onde
            ' se encontra os relatórios e o TabControl
            If TypeOf ctrl Is PageView Then

                ' Atribui a uma variável o primeiro controlo da primeira TabPage
                Dim tabPag As TabPage = CType(ctrl.Controls(0), TabControl).TabPages(0)

                ' Altera o nome visível
                tabPag.Text = "Relatório"

                Exit For

            End If

        Next

   

Adicionar controlos à Barra de Ferramentas

De modo a personalizar o CystalReportViewer é possível adicionar controlos, remove-los, modificar os existentes, etc. Este exemplo mostra com inserir um ToolStripButton e uma ToolStripLabel à barra de ferramentas.

        For Each ctrl As Control In Me.PtCrystalReportViewer2.Controls
            If TypeOf ctrl Is Windows.Forms.ToolStrip Then

                Dim ts As ToolStrip = CType(ctrl, ToolStrip)

                ' Cria um novo botão e define algumas propriedades
                Dim btnSave As New ToolStripButton
                btnSave.Text = "Gravar no Disco"
                btnSave.BackColor = Color.SeaGreen
                btnSave.ForeColor = Color.White

                ' Adiciona o botão
                ts.Items.Add(btnSave)

                ' Cria uma nova label e define o texto
                Dim lblLink As New ToolStripLabel
                lblLink.Text = "http://vbtuga.blogspot.com"

                ' Define como link e alinha-a à direita
                lblLink.IsLink = True
                lblLink.Alignment = ToolStripItemAlignment.Right

                ' Adiciona a ToolStripLabel
                ts.Items.Add(lblLink)

                ' Define quando for efectuado um clique em cada
                ' um dos objectos irá ser executado o sub DoWork
                AddHandler btnSave.Click, AddressOf DoWork
                AddHandler lblLink.Click, AddressOf DoWork

                Exit For

            End If

        Next

Depois para executar o código quando for clicado nos novos controlos:

    ' Verifica qual controlo em que foi efectuado o clique
    Private Sub DoWork(ByVal sender As System.Object, ByVal e As System.EventArgs)

        If TypeOf sender Is ToolStripButton Then

            ' Se for no botão 
            Debug.WriteLine("Pressionado o botão 'Gravar'")

        ElseIf TypeOf sender Is ToolStripLabel Then

            ' Se for no label
            Debug.WriteLine("Carregado no link ...")

        End If

    End Sub

   

CystalReportViewer personalizado em Português

Finalmente, e utilizando um pouco do que foi mostrado anteriormente, e incluindo mais algumas funcionalidades como renomear todos os ToolTips (textos de ajuda), remover algumas opções, criar uma nova barra de estado em Português (indicação da página e total de páginas) são algumas das alterações que estão efectuadas.

Existem ainda algumas personalizações possíveis em design mode como o StatusBarStyle e StatusBarStyle (System, Professional) e DisplayMainMenu, que permite esconder o botão “Main Menu” quando o relatório for iniciado.

Podem testar, verificar o código, solicitar ou apresentar melhorias ao controlo personalizado:

          Dowload (inclui dll e projecto de demonstração): CrystalReportViewerPT

Nota: Este controlo encontrasse em testes e é apenas uma demonstração, pelo que deverá ser testado e validado antes da sua utilização.

 

PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

0 comentários:

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico