Jump to content

Recommended Posts

Posted (edited)

Já fazia tempo que eu estava querendo me libertar do Crystal Reports, porque o usuário tem que instalá-lo para que os relatórios funcionem.

E além disso ele é muito pesado e os relatórios que faço são simples.

Já o ReportViewer, utiliza a framework...só que esbarrei em um detalhe, só consegui fazer funcionar a partir da 3.0, porque na 2.0 não funcionou NO vs2010

Aproveitando o tópico, segueto o link de um exemplo muito bom que carrega automaticamente o rdlc

http://www.sourcecodester.com/visual-basic-net/load-rdlc-report-using-report-viewer-programmatically.html

Edited by samesdavis
Posted

Olá pessoal,

aproveitando o tópico, utilizei o exemplo do link acima, mas encontrei APENAS uma dificuldade.

Não sei como passar parâmetros usando esse método, segue abaixo o código que estou usando:


Imports Microsoft.Reporting.WinForms

Public Class frmReport
   Public Property strReport As String

   Private Function GetReport(ByVal reportName As String) As IO.Stream

       ' Recolhe a informação da Assembly 
       Dim currentAssembly As Reflection.Assembly = _
                   Reflection.Assembly.GetExecutingAssembly()

       ' Irá guarda o caminho + nome do ficheiro 
       Dim resource As String = String.Empty

       ' Verifica nos Resources se encontra o relatório pretendido 
       Dim arrResources As String() = _
                   currentAssembly.GetManifestResourceNames()

       For Each resource In arrResources
           If resource.Contains(reportName) Then Exit For
       Next

       ' Coloca o relatório embebido na Stream 
       Dim resourceStream As IO.Stream = _
           currentAssembly.GetManifestResourceStream(resource)

       Return resourceStream

   End Function

   Private Sub frmReport_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       Dim rptDataSource As ReportDataSource = Nothing

       Try
           With Me.ReportViewer1.LocalReport
               Dim rptStream As IO.Stream = GetReport(strReport & ".rdlc")
               .LoadReportDefinition(rptStream)
               .DataSources.Clear()
           End With

           Select strReport
               Case "rptFarmacia"
                   Dim ds As New DHO.FarmaciaDataSet
                   Dim da As New DHO.FarmaciaDataSetTableAdapters.FarmaciaDatasetTableAdapter

                   da.Fill(ds._FarmaciaDataset)

                   ' Use the same name as defined in the report Data Source Definition
                   rptDataSource = New ReportDataSource("Farmacia", ds.Tables("FarmaciaDataset"))
           End Select

           Me.ReportViewer1.LocalReport.DataSources.Add(rptDataSource)

           Dim params(3) As Microsoft.Reporting.WebForms.ReportParameter

           Select Case strReport
               Case "rptFarmacia"
                   ReDim params(1)
                   params(0) = New Microsoft.Reporting.WebForms.ReportParameter("DtInicio", Frm_ComprasFarmacia.txtDT1.Value, True)
                   params(1) = New Microsoft.Reporting.WebForms.ReportParameter("DtFim", Frm_ComprasFarmacia.txtDT2.Value, True)

           End Select

           Me.ReportViewer1.LocalReport.SetParameters(params)
           Me.ReportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout)

       Catch ex As Exception
           MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
   End Sub
End Class

A minha ideia é ter apenas um form para carregar todos os relatórios, por isso estou utilizando o select com Redim para os parâmetros.

Só que está dando erro nessa linha


Me.ReportViewer1.LocalReport.SetParameters(params)

Alguém pode me ajudar?

Posted

Resolvido, não passei parametro, apliquei o filtro no dataset e enviei para o datasource do report

           Select strReport
               Case "rptFarmacia"
                   Dim ds As New DHO.FarmaciaDataSet
                   Dim da As New DHO.FarmaciaDataSetTableAdapters.FarmaciaDatasetTableAdapter
                   RsDataSet = Banco.RetornarDataSet(strfiltro)
                   da.Fill(ds._FarmaciaDataset)
                   rptDataSource = New ReportDataSource("Farmacia", RsDataSet.Tables(0))
           End Select

Posted

Mas não foi preciso usar parametros, inclusive até modifiquei mais o código:



RsDataSet = Banco.RetornarDataSet(strfiltro)

Select strReport
      Case "rptFarmacia"
      da.Fill(ds._FarmaciaDataset)
      rptDataSource = New ReportDataSource("Farmacia", RsDataSet.Tables(0))
End Select

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.