Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eduardohaag

Mudar reportviewer via codigo

Recommended Posts

Olá pessoal,

Estou trabalhando em um projeto que preciso gerar diversos relatório, porém não queria ter de criar um Userform pra cada relatório, por isso criei um Userform com um reportviewer e crio os relatórios, e apenas faço a mudança de qual relatório exibir via código.

Até ai tudo bem, meu problema surge nos relatórios que preciso usar um dataset para popular o mesmo.

Tenho um dataset chamado "Same_relDataset.xsd" onde possui varios Datatable, como por exemplo "rel_ls_clientes" e "rel_ls_produtos", um para cada relatório.

Preciso mudar a fonte de dados do reportviewer via código para que eu possa fazer em tempo de execução.

Já li varios tutoriais principalmente sobre a instrução datasource.add do reportviewer mas até agora não obtive sucesso.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, quintelab disse:

Conferi o link mas como sou meio noob em programação principalmente quando se trata de tratamento de dados, não consegui fazer funcionar aqui.
Converti o código do link pra .net usando o http://converter.telerik.com/ e fiz as adaptações pro meu projeto, mas não funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim converteu pra .net ? O código é .net, é c#. Esta usando vb.net ?

 

Foi essa parte aqui que tentou ?

 

private void rptGetDataset()
    {
        DataSet ds = new DataSet();
        ds.DataSetName = "dsNewDataSet";
        string sql = "";
        sql = "SELECT ID, CLIENT_ID, AGENT_ID FROM TBLMAILDELETED";
        OdbcDataAdapter da = new OdbcDataAdapter(sql, conn);
        ds.GetXmlSchema();
        da.Fill(ds);
        ds.WriteXmlSchema(_path + "/App_Code/Ds.xsd");
        ds.WriteXml(_path + "/App_Code/Ds.xml");
    }

    private DataTable getData()
    {
        DataSet dss = new DataSet();
        string sql = "";
        sql = "SELECT ID, CLIENT_ID, AGENT_ID FROM TBLMAILDELETED";
        OdbcDataAdapter da = new OdbcDataAdapter(sql, conn);
        da.Fill(dss);
        DataTable dt = dss.Tables[0];
        return dt;
    }

    private void runRptViewer()
    {
        this.ReportViewer1.Reset();
        this.ReportViewer1.LocalReport.ReportPath = Server.MapPath("Report.rdlc");
        ReportDataSource rds = new ReportDataSource("dsNewDataSet_Table", getData());
        this.ReportViewer1.LocalReport.DataSources.Clear();
        this.ReportViewer1.LocalReport.DataSources.Add(rds);
        this.ReportViewer1.DataBind();
        this.ReportViewer1.LocalReport.Refresh();
    }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue abaixo. Pode ser que eu esteja cometendo algum erro muito simples, mas não estou conseguindo achar, até mesmo por ser um amador da programação rsrs.

A principio o código roda sem problema algum, mas quando abre a janela do relatório ele não carrega data, simplesmente o reportviewer aparece em branco.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\programa loja\same_rel.mdb")
        Dim cmd As OleDbCommand
        Dim sql As String
        Dim i As Integer = 0
        Dim filtro As String


        conn.Open()

        '->>>>>>>>
        relatórios.ReportViewer2.Reset()
        relatórios.ReportViewer2.LocalReport.ReportEmbeddedResource = "Same_1._0___Alpha.Report3.rdlc"
        Dim rds As New ReportDataSource("same_relDataset_Table", getData())
        relatórios.ReportViewer2.LocalReport.DataSources.Clear()
        relatórios.ReportViewer2.LocalReport.DataSources.Add(rds)
        relatórios.ReportViewer2.LocalReport.Refresh()

        '------>>>>>

        conn.Close()
        relatórios.MdiParent = principal
        relatórios.Show()
    End Sub

    Private Sub rptGetDataset()
        Dim ds As New DataSet()
        ds.DataSetName = "same_relDataset"
        Dim sql As String = ""
        sql = "SELECT * FROM rel_ls_produtos"
        Dim da As New OleDbDataAdapter(sql, conn)
        da.Fill(ds)
    End Sub

    Private Function getData() As DataTable
        Dim dss As New DataSet()
        Dim sql As String = ""
        sql = "SELECT * FROM rel_ls_produtos"
        Dim da As New OleDbDataAdapter(sql, conn)
        da.Fill(dss)
        Dim dt As DataTable = dss.Tables(0)
        Return dt
    End Function

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Favor desconsiderar o código acima, e  considerar o abaixo:

 

Não apresenta nenhum erro, mas quando a janela do reportviewer abre, no lugar do relatório aparece "Não foi fornecida nenhuma instância de origem de dados para a origem de dados 'same_relDataSet'"

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\programa loja\same_rel.mdb")
        Dim cmd As OleDbCommand
        Dim sql As String
        Dim i As Integer = 0
        Dim filtro As String


        conn.Open()

        '->>>>>>>>
        relatórios.ReportViewer2.Reset()
        relatórios.ReportViewer2.LocalReport.ReportEmbeddedResource = "Same_1._0___Alpha.Report3.rdlc"
        Dim rds As New ReportDataSource("same_relDataset_Table", getData())
        relatórios.ReportViewer2.LocalReport.DataSources.Clear()
        relatórios.ReportViewer2.LocalReport.DataSources.Add(rds)
        relatórios.ReportViewer2.LocalReport.Refresh()

        '------>>>>>


        If tb_desc.Text = "" Then
            If cb_tipo.Text = "" Then
                filtro = "Nenhum"
            Else
                filtro = "Tipo => " & cb_tipo.Text
            End If
        Else
            If cb_tipo.Text = "" Then
                filtro = "Descrição => " & tb_desc.Text
            Else
                filtro = "Descrição => " & tb_desc.Text & "          Tipo => " & cb_tipo.Text
            End If
        End If

        relatórios.ReportViewer2.LocalReport.SetParameters(New ReportParameter("filtro", filtro))
        relatórios.ReportViewer2.LocalReport.SetParameters(New ReportParameter("qtd", lb_itens.Text))
        relatórios.MdiParent = principal
        relatórios.Show()
    End Sub

    Private Sub rptGetDataset()
        Dim ds As New DataSet()
        ds.DataSetName = "same_relDataset"
        Dim sql As String = ""
        sql = "SELECT * FROM rel_ls_produtos"
        Dim da As New OleDbDataAdapter(sql, conn)
        da.Fill(ds)
    End Sub

    Private Function getData() As DataTable
        Dim dss As New DataSet()
        Dim sql As String = ""
        sql = "SELECT * FROM rel_ls_produtos"
        Dim da As New OleDbDataAdapter(sql, conn)
        da.Fill(dss)
        Dim dt As DataTable = dss.Tables(0)
        Return dt
    End Function

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já debugou pra ver se os dataset ta sendo preenchido corretamente ?

 

Comparando com o código c# vi que esta falando essa linha:

this.ReportViewer1.DataBind();

Outra dica, não utilize acento. Vi que esta usando relatórios

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, quintelab disse:

Já debugou pra ver se os dataset ta sendo preenchido corretamente ?

 

Comparando com o código c# vi que esta falando essa linha:


this.ReportViewer1.DataBind();

Outra dica, não utilize acento. Vi que esta usando relatórios

 

Sim o dataset está prenchido.

Não utilizei essa linha porque apresenta o seguinte erro "Erro    16    Acesso à propriedade deve atribuir à propriedade ou usar seu valor." antes mesmo de executar.

E não faço a menor ideia de como usar essa propriedade.

A linha no vb.net ficou assim:

relatórios.ReportViewer1.DataBindings()

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho vb.net aqui pra testar, mas estou olhando outras pessoas que tiveram o mesmo problema como aqui: https://stackoverflow.com/questions/14940074/reportviewer-programmatically-generate-report vejo poucas diferenças. Já tentou remover os filtros ? Olhando este link vi também que ao invés de:

relatórios.ReportViewer2.LocalReport.Refresh()

Ele usou:

 

relatórios.ReportViewer2.LocalReport.RefreshReport()

Veja se tem esse método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por igadino
      Bom dia pessoal, convertir essa função do C# para vba ele funciona perfeitamento no excel e access
      porem estou tentendo usar ela no vb.net  editor VISUAL STUDIO 2013, aparece o erro conforme a imagem enexo, alguem consegue corrigir esse erro;
      Function crc_ccitt_ffff(strParam As String) As String
              Const CRC_POLY_CCITT As Long = &H1021&
              Const CRC_START_CCITT_FFFF As Long = &HFFFF&
              Dim crc As Long, b() As Byte, c As Long, i As Long, j As Long
              Dim crc_tabccitt(0 To 255) As Long
              For i = 0 To 255
                  crc = 0
                  c = i * 256
                  For j = 0 To 7
                      If (crc Xor c) And 32768 Then
                          crc = (crc * 2) Xor CRC_POLY_CCITT
                      Else
                          crc = crc * 2
                      End If
                      c = c * 2
                  Next j
                  crc_tabccitt(i) = crc
              Next i
                  b = strParam
              crc = CRC_START_CCITT_FFFF
              For i = 0 To UBound(b) Step 2
                  crc = (crc * 256) Xor crc_tabccitt(((crc \ 256) Xor b(i)) And 255)
                  crc = ((crc \ 65536) * 65536) Xor crc
              Next i
              crc_ccitt_ffff = Hex(crc)
          End Function

    • Por Michel Ol!ver
      Olá galera, estou com  um pequeno problema.. 
      gostaria de duplicar minha estrutura do report viewer dentro de um laço de repetição
       
       
      Tem possibilidade ?
       
      Exemplo do código abaixo : 
      ReportParameter[] parametros = { //cabecalho new ReportParameter("fazenda", ObjPropriedade.nome), new ReportParameter("lavoura", oArea.descricao + " (" + tamLavoura.ToString() + " Ha)"), new ReportParameter("cultura", ObjCiclo.Cultura.nome), new ReportParameter("resteva", resteva), new ReportParameter("dataPlantio", ObjCiclo.dataPlantio.Value.ToShortDateString()), new ReportParameter("dataColheita", ObjCiclo.dataColheita.Value.ToShortDateString()), new ReportParameter("unidade", ObjCiclo.Cultura.UnidadeMedida.nome), new ReportParameter("minima", ObjCiclo.prodMinima.ToString()), new ReportParameter("maxima", ObjCiclo.prodMaxima.ToString()), } reportAnalises.LocalReport.DataSources.Add(new ReportDataSource("dsCicloInter", lstRelCicloInter)); reportAnalises.LocalReport.DataSources.Add(new ReportDataSource("dsFertilizanteInter", lstRelFertilizanteInter)); reportAnalises.LocalReport.DataSources.Add(new ReportDataSource("dsMediaFertilizanteInter", lstMediaRelFertilizanteInter)); Tentei colocar um laço de repetição nessa estrutura, mas somente me apresenta um relatório. 
       
    • Por Roberto S. Santos
      Boa noite.
      Alguém pode me ajudar a fazer a conexão pra salvar Id, UserID e o nome da pessoa ?
      Bdados : cadastro
      Tabela : usuario
      Sem senha : root somente.
      Des de já agradeço.
    • Por luizpaps
      Seguindo instruções da web instalei o reportviewer no Visual Studio Comunity 2017, mas quando vou usar o componente reportviewer da barra de ferramenta, ao inseri-lo no form ao invés de aparecer aquele componente para visualizar relatório, aparece um componente não visual reportviewer1 em baixo do form, o que estou fazendo de errado?
    • Por Roberto S. Santos
      Boa noite amigos programadores.
      Como posso salvar os dados do tracker.dat no MySQL ?
      Dados : textbox1.text
      Estou usando vb.net 
      Queria uma tabela no MySQL usando o Wamp .
      Poderiam me ajudar ?
      Obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.