none
Preencher um dataset(não tipado) de um relatório(Report) RRS feed

  • Pergunta

  • Boa noite pessoal, estou tendo problemas para gerar um report, eu estou preenchendo o datatable do dataset dele usando C#  da seguinte forma:

    private void frmRelat_Load(object sender, EventArgs e)
    {
                DataSetOrc.ORCAMENTODataTable dtTabela1 = new      DataSetOrc.ORCAMENTODataTable();
    
    
                DataRow newCustomersRow = dtTabela1.NewRow();
    
                newCustomersRow[0] = "Teste0";
                newCustomersRow[1] = "Teste 1";
                newCustomersRow[2] = "Teste 2";
    
    
                dtTabela1.Rows.Add(newCustomersRow);
                
                this.reportViewer1.RefreshReport();
    
                
            }

    porém o relatório vem vazio, ou ele não está carregando os dados do dataset ou então eu não estou conseguindo inserir os dados corretamente.

    Estou usando o VS 2012 e o relatório está sendo gerado com o Report Viewer.

    Desde já agradeço.

     


    • Editado Vinicius_kruz quinta-feira, 3 de setembro de 2015 01:01
    quarta-feira, 2 de setembro de 2015 22:08

Respostas

  • Pessoal, consegui resolver, vou postar as duas formas que fiz, pode ser que seja útil para alguém:

    a primeira opção é populando um datatable através de um banco de dados firebird:

    this.reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.Reset();
    
                DataTable dt = new DataTable();
                dt = AcessoFB.fb_GetDados("select * from PAIS");//this.inputValuesTableAdapter.GetData();
    
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "frmTesteReport.ReportPais.rdlc";
    
                ReportDataSource reportDataSource = new ReportDataSource();
                
                reportDataSource.Name = "DataSet1";
                reportDataSource.Value = dt;
    
                this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
                this.reportViewer1.RefreshReport();

    Na segunda opção, o datatable é povoado manualmente:

    this.reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.Reset();
    
                
                DataTable dtTabela1 = new DataTable();
                
                dtTabela1.Columns.Add(new DataColumn("PAI_ID", typeof(int)));
                dtTabela1.Columns.Add(new DataColumn("PAI_NOME", typeof(string)));
    
                DataRow row;
                row = dtTabela1.NewRow();
                row[0] = 1;
                row[1] = "TST2";
    
                dtTabela1.Rows.Add(row);
                
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "frmTesteReport.ReportPais.rdlc";
    
                ReportDataSource reportDataSource = new ReportDataSource();
    
                reportDataSource.Name = "DataSet1";
                reportDataSource.Value = dtTabela1;
    
                this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
                this.reportViewer1.RefreshReport();
    

    Fica aí a solução. Abraço.

    • Marcado como Resposta Vinicius_kruz quinta-feira, 3 de setembro de 2015 23:50
    quinta-feira, 3 de setembro de 2015 23:50

Todas as Respostas

  • Olá Vinicius

    Tente adicionar um reportdatasource ao seu código:

    this.reportViewer1.DataSources.Add(new ReportDataSource("dtTabela1",dtTabela));

    antes da linha com o RefreshReport();

    Neste link tem um exemplo:

    https://msdn.microsoft.com/en-us/library/microsoft.reporting.winforms.localreport.aspx

    Abraço

    quinta-feira, 3 de setembro de 2015 02:14
  • Bom dia Demetrio, primeiramente, obrigado pelo interesse em ajudar.

    deu erro na linha que você citou, não aceitou o .DataSource e nem o new ReportDataSource , deve ser que precisarei adicionar alguma classe para aceitá-los.

    Já o link com o exemplo, eu uso desta forma aí geralmente é quando quero passar parâmetros, no meu caso eu quero é inserir dados no dataset do reportviewer antes de carregá-lo. Vou ver se consigo fazer isto conforme o link do exemplo, embora lá explique é como inserir através de um .xls, creio que o princípio seja o mesmo.

    Abração.

     

    quinta-feira, 3 de setembro de 2015 12:57
  • Pessoal, consegui resolver, vou postar as duas formas que fiz, pode ser que seja útil para alguém:

    a primeira opção é populando um datatable através de um banco de dados firebird:

    this.reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.Reset();
    
                DataTable dt = new DataTable();
                dt = AcessoFB.fb_GetDados("select * from PAIS");//this.inputValuesTableAdapter.GetData();
    
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "frmTesteReport.ReportPais.rdlc";
    
                ReportDataSource reportDataSource = new ReportDataSource();
                
                reportDataSource.Name = "DataSet1";
                reportDataSource.Value = dt;
    
                this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
                this.reportViewer1.RefreshReport();

    Na segunda opção, o datatable é povoado manualmente:

    this.reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.Reset();
    
                
                DataTable dtTabela1 = new DataTable();
                
                dtTabela1.Columns.Add(new DataColumn("PAI_ID", typeof(int)));
                dtTabela1.Columns.Add(new DataColumn("PAI_NOME", typeof(string)));
    
                DataRow row;
                row = dtTabela1.NewRow();
                row[0] = 1;
                row[1] = "TST2";
    
                dtTabela1.Rows.Add(row);
                
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "frmTesteReport.ReportPais.rdlc";
    
                ReportDataSource reportDataSource = new ReportDataSource();
    
                reportDataSource.Name = "DataSet1";
                reportDataSource.Value = dtTabela1;
    
                this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
                this.reportViewer1.RefreshReport();
    

    Fica aí a solução. Abraço.

    • Marcado como Resposta Vinicius_kruz quinta-feira, 3 de setembro de 2015 23:50
    quinta-feira, 3 de setembro de 2015 23:50