Skip to content

Criando Relatórios de Múltiplas Colunas com ReportViewer

Você já precisou criar um relatório que mostre os dados distribuídos por várias colunas? Então você pode ter procurado como criar e encontrou algo sobre relatórios de estilo de boletim informativo e até mesmo sobre etiquetas. E animado por ter descoberto esta solução, você começou a criar seu relatório e após implementar o relatório descobriu que era aquilo que queira? 🙁

Bom como nem tudo se cria ou se copia encontrei uma solução neste endereço http://blog.hoegaerden.be/2012/11/01/creating-multiple-column-reports/ no entanto o que vou lhe demonstrar é como fiz, e segui como norte o post do link acima.

Diferentemente do que o artigo citado eu não tenho como usar os artifícios T-SQL do SQL Server , já que o banco que usei foi Mysql e a partir dele populei uma ListView.

Vamos passo a passo ok?

  1. Insira um novo Dataset ao projeto
Imports Microsoft.Reporting.WinForms

Public Class Form1
    Private strNomeRelatorio As String
    Private listaLeituras As ListView
    Private dt As DataTable = New DataTable
    Private rprtDTSource As ReportDataSource = New ReportDataSource()

    Public Property listViewerRelatorio() As ListView
        Get
            Return listaLeituras
        End Get
        Set(ByVal Value As ListView)
            listaLeituras = Value
        End Set
    End Property

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.ReportViewer1.LocalReport.EnableExternalImages = True
        dt = convertListViwerToDataTable(listaLeituras)
        rprtDTSource.Name = "DataSet1"
        rprtDTSource.Value = dt
        Me.ReportViewer1.LocalReport.DataSources.Add(rprtDTSource)

        Me.ReportViewer1.RefreshReport()
    End Sub

    Public Function convertListViwerToDataTable(ByVal LS_VIEW As ListView) As DataTable
        Dim DT_TAB As New DataTable
        Dim DCOL As DataColumn
        Dim coluna As New ColumnHeader
        Dim numeroColuna As Integer = 0
        Dim idSensor As Integer = 0

        If LS_VIEW.Items.Count < 1 Then
            Return DT_TAB
        Else
            coluna = LS_VIEW.Columns.Add("COLUNA")
            LS_VIEW.Items(0).SubItems.Add("COLUNA")
            For i As Integer = 0 To LS_VIEW.Items(0).SubItems.Count - 1
                DCOL = New DataColumn(LS_VIEW.Columns(i).Text.Replace(" ", "_").Replace("Ç", "C").Replace("Ã", "A").Replace("/", "_").Replace("Õ", "O"))
                DT_TAB.Columns.Add(DCOL)
            Next
            For i As Integer = 0 To LS_VIEW.Items.Count - 1 Step 55
                Dim DROW As DataRow = DT_TAB.NewRow
                If LS_VIEW.Items(i).SubItems(1).Text <> idSensor.ToString Then
                    idSensor = CInt(LS_VIEW.Items(i).SubItems(1).Text)
                    numeroColuna = 0
                End If
                For j As Integer = 0 To LS_VIEW.Columns.Count - 1
                    DROW(LS_VIEW.Columns(j).Text.Replace(" ", "_").Replace("Ç", "C").Replace("Ã", "A").Replace("/", "_").Replace("Õ", "O")) = LS_VIEW.Items(i).SubItems(j).Text
                Next
                DT_TAB.Rows.Add(DROW)
            Next
        End If
        Return DT_TAB
    End Function

End Class
Published in.NETBanco de Dados

Be First to Comment

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *