Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por drapn
      Boa tarde pessoal
      Estou com um projeto em Vb.Net que consiste em importar dados de uma planilha de Excel para um Datagridview.
      O projeto esta funcionando tudo ok porem notei que quando vou movendo as barras laterais e inferiores o formulário apresenta grande lentidão para mover as colunas etc...
      Fiz o teste criando um projeto novo com somente 1 Form, 1 Datagrid e 1Botão e os códigos para fazer a importação e quando eu "populo" o datagridview com o conteudo ele apresenta esses legs.
       
      Alguem a ja passou por isso?
      Será que é configuração da máquina? (Não é uma máquina tão fraca)
      O Vb.NET é a versão 2015
       
       
      Os arquivos de Excel variam de 80 Linhas por 5 Colunas á 400 linhas e 5 colunas
       
      O código é esse:
       
      Sub ImportaEstoque()         Dim Local         Local = EndArquivo()         If String.IsNullOrWhiteSpace(Local) Then             MessageBox.Show("Nenhum arquivo foi selecionado.", "Informação.", MessageBoxButtons.OK, MessageBoxIcon.Information)             Return         End If         '------------------------------         Dim caminhoArquivoExcel As String = Local         Dim nomePlanilhaExcel As String = "ESTQ" & "$"         Dim conexaoOleDb As OleDbConnection = Nothing         Dim ds As DataSet         Dim cmd As OleDbDataAdapter         '------------------------------         Try             'conexaoOleDb = New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Local & ";Extended Properties=Excel 8.0;")             conexaoOleDb = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & Local & ";Extended Properties='Excel 8.0;HDR=Yes'")             'cmd = New OleDbDataAdapter("Select * from [" & nomePlanilhaExcel & "]", conexaoOleDb)             cmd = New OleDbDataAdapter("Select * from [" & nomePlanilhaExcel & "]  Where UM Like '%" & "PC" & "%'", conexaoOleDb)             cmd.TableMappings.Add("Table", "tabelaExcel")             ds = New DataSet             cmd.Fill(ds)             dgvDados.DataSource = ds.Tables(0)         Catch ex As Exception             MessageBox.Show(ex.ToString, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)         Finally             conexaoOleDb.Close()         End Try         sbQtdItens.Text = "Encontrados " & dgvDados.RowCount.ToString & " itens."     End Sub  
       
       
      Pessoal desde já muito obrigado pela força!
    • Por eduardohaag
      Olá estou criando um sistema onde preciso calcular a previsão de envio do pedido em dias uteis, para isso estou usando um webservice gratuito que retorna um xml, porém estou tendo o erroSystem.XML.XmlException: 'Dados no nível raiz inválidos. Linha 1, posição 1.'
       
      Meu código é 
      Sub Preenchedata() Dim sql = "SELECT PrazoPadraoProducao FROM Configuracoes" Dim dr As DataTable = AcessoDB.ExecutarComando(sql, CommandType.Text, Nothing, AcessoDB.TipoDeComando.ExecuteDataTable) Dim ds As New DataSet Dim xml As String = "https://elekto.com.br/api/Calendars/br-BC/Add?initialDate=" & Now.Year & "-" & Now.Month & "-" & Now.Day & "&days=" & dr.Rows(0).Item(0) & "&type=work" ds.ReadXml(xml)  
      e o xml retornado é 
       
      <dateTime xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2019-05-03T00:00:00Z</dateTime>  
      Alguém tem alguma ideia de como posso eliminar o erro?
    • Por lindomar55
      ola amigos preciso de uma ajudinha, estou montando uma aplicaçao usando vb.net windows forms. nela tenho um botao onde chamo uma url no chrome com o seguinte comando.
      Private Sub Btn_abrir_site_Click(sender As Object, e As EventArgs) Handles Btn_abrir_site.Click
              Dim url As String = “https://www.rico.com.você/dashboard/tesouro-direto/“
              Process.Start(url)
          End Sub
      no google entao eu acesso com meu logim manualmente(prefiro assim). e em realizo uma serie de operaçoes, chega um determinado momento que preciso passar passar os dados que o site me apresenta entao(apos as operaçoes) para o aplicativo. ai é que esta o problema. neste ponto estou boiando.
      no codigo abaixo por exemplo: precisava obter os valores 12,36 e 8806,84 de forma automatica e colocar em textbox.
      vi exemplos na net que mostram com webbrowser porem eu prefiro que seja com o chrome. e nesses exemplos ele abre a pagina e ja obtem os dados. eu preciso trabalhar na pagina muiiiito e so depois baixar os dados programaticamente.
      qualquer ajuda sera bem vinda....
       

    • Por igadino
      Boa Tarde pessoal eu peguei esta função no link abaixo parece que e em C# e transformei em vb.net só que esta dando o erro na linha em destaque
      https://github.com/BoletoNet/boletonet/blob/master/src/Boleto.Net.MVC/Models/Exemplos.cs

      Public Sub GeraBoletoCE(ByVal qtde As Integer)
              ' Cria o boleto, e passa os parâmetros usuais
              Dim ce As BoletoBancario
              Dim boletos As New List(Of BoletoBancario)()
              For i As Integer = 0 To qtde - 1
                  ce = New BoletoBancario()
                  ce.CodigoBanco = _codigoBanco
                  Dim vencimento As New DateTime(2007, 9, 10)
                  Dim instr As New Instrucao(1)
                  Dim c As New Cedente("00.000.000/0000-00", "Next Consultoria Ltda.", "0123", "100618", "9")
                  c.Codigo = 112233
                  ' BoletoNet.Boleto b = new BoletoNet.Boleto(vencimento, 20.00m, "14", "0123456789", c);
                  Dim b As New Boleto(vencimento, 2952.95, "14", "0123456789", c)
                  b.NumeroDocumento = "21212114779797" '1b.NossoNumero
                  b.Sacado = New Sacado("000.000.000-00", "Jose Pedro Ongueira de Oliveira")
                  b.Sacado.Endereco.[End] = "Rua Dr. Henrique Portugal, 12"
                  b.Sacado.Endereco.Bairro = "Loteamento Lago Sul"
                  b.Sacado.Endereco.Cidade = "Palmas"
                  b.Sacado.Endereco.CEP = "77062141"
                  b.Sacado.Endereco.UF = "TO"
                  b.Sacado.Endereco.Logradouro = "Rua Dr. Henrique Duarte Lima"
                  b.Sacado.Endereco.Numero = "8980978987"
                  b.Sacado.Endereco.Complemento = "Casa"

                  b.NumeroDocumento = "00001"
                  b.DataProcessamento = DateTime.Now
                  b.DataDocumento = DateTime.Now
                  instr.Descricao = "Não Receber após o vencimento"
                  b.Instrucoes.Add(instr)
                  ce.Boleto = b
                  ce.Boleto.Valida()
                  boletos.Add(ce)
              Next
              GeraLayout(boletos)
          End Sub 
    • Por amenum
      Pessoal, tudo bem? Fiquei parado da programação um bom tempo, e agora que retornei, queria dar manutenção nas minhas aplicações web que estão em vb.net webforms. Comprei um template de bootstrap (https://seantheme.com/color-admin-v4.2/admin/html/index_v2.html) e queria controlar os elementos via code behind in vb.net, mas estou sofrendo aqui por conta do meu limitado conhecimento.
       
      Alguém poderia me dar uma luz em base neste link:
      https://seantheme.com/color-admin-v4.2/admin/html/ui_modal_notification.html
       
      Ao clicar na maioria dos botões dessa página, abre um modal ou alert. Pois bem, eu gostaria de simular essa abertura a partir de uma lógica no code behind, por exemplo, em um formulário, caso alguma regra não esteja sendo cumprida. Simples assim.
       
      No código original, temos:
      Chamada:
      <a href="#modal-dialog" class="btn btn-sm btn-success" data-toggle="modal">Demo</a>
       
      Div do modal
      <div class="modal fade" id="modal-dialog" runat="server">
                                      <div class="modal-dialog">
                                          <div class="modal-content">
                                              <div class="modal-header">
                                                  <h4 class="modal-title">Modal Dialog</h4>
                                                  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                                              </div>
                                              <div class="modal-body">
                                                  <p>
                                                      Modal body content here...
                                                  </p>
                                              </div>
                                              <div class="modal-footer">
                                                  <a href="javascript:;" class="btn btn-white" data-dismiss="modal">Close</a>
                                                  <a href="javascript:;" class="btn btn-success">Action</a>
                                              </div>
                                          </div>
                                      </div>
                                  </div>
       
      o que eu preciso?
      No code behind
       
       Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            try
                if verificaCampos() = false then ABRE O MODAL DIV COM A MENSAGEM DE ERRO          
           Catch ex As Exception
                     Throw ex
            end try
          End Sub
       
      Alguém pode me ajudar?
       
      muito obrigado.
       
×

Informação importante

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