none
Gerar relatório em tempo de exceução a partir de um DataTable ou DataSet no RepotViewer RRS feed

  • Pergunta

  • Olá pessoal,



    Preciso que seja gerado um relatório a partir de um DataSet em tempo exceução. O preenchimento do DataSet é feito por um método que retona os dados necessários para o relatório.
    Encontrei alguns artigos de como utilizar o DataSet no ReportViewer, mas todos eles utilizam a parte visual. No meu caso, desse jeito não fucniona, pois o método que retorna os dados do relatório nem sempre se conecta com a mesma base de dados.

    Alguém poderia me passar algum tutorial ou o códgo de como fazer isso?

    Grata,

    segunda-feira, 8 de dezembro de 2008 19:25

Respostas

  • Boa tarde Michelle

    para o DataSource por código funcionar, você também deve expecifica-lo no design do relatório


    Se você seguir o vídeo disponível para download do Laércio, (Tópico fixo no fórum) verá que na hora de criar o "dataset" pelo designer, acontece o seguinte:

    -Abra o relatório no modo designer: quando você clica na aba Report -> DataSource, ele trará para você a lista dos Datasources do Projeto. Você deve escolher o mesmo que você esta usando no seu código "dsDadosRelatorio". O que acontece é, você não tem a opção de adicionar esse DataSource, e sim algum outro DataSource nomeado por "dsDadosRelatorio_NomedaTabela". Escolha aí o DataSource que você usará, sendo este a procedure, view, table etc. Renomeie ele para o nome que está no seu código ("dsDadosRelatorio"). feche a janela

    -Por último, vá na tabela do Relatório, selecione as suas propriedades, e coloque o DataSetName que esta na combo, que será o "dsDadosRelatorio"


    Provavelmente continuará dando erro por causa do nome do relatório. Este tem que ser referenciado por caminho absoluto (ex. "C:\aplicacao\...\....\....NomeDoRelatorio.rdlc").


    Se não funcionar, procure dar uma olhada nos vídeos do Laércio no msdn media center. o link está no tópico fixo do fórum na sessão de relatórios (esta).


    Espero ter ajudado,
    Paulo Eduardo Bueno
    quinta-feira, 11 de dezembro de 2008 17:09

Todas as Respostas

  • Bom dia Michele,
    Eu já tive o mesmo problema que vc, oque está acontecendo é que vc precisar criar a parte do código também, vc pode fazer isso criando uma tela exclusiva para o relatório ou o utilizando dentro de uma tela já existente.

    Nos videos do Laercio ele demonstra como se faz isso, mas como eu acho q vc não vái querer ver umas 3 horas de video só para gerar este relatório eu acredito que vc possa resolver vendo apenas o primeiro video lá nos 20 minutos.

    Se quiser detalhes é só falar, eu mesmo apanhei um pouco quando vi os videos.

    Um Abraço
    João Pires
    terça-feira, 9 de dezembro de 2008 13:07
  • Olá João,

    No início desse fórum, vi que o Laercio deixou um link para os vídeos:
    http://www.msdnbrasil.com.br/mediacenter/default.aspx . Nesse endereço, existe o vídeo 1 com 45 minutos, e os vídeos 2 e 3 com 1 hora e 30 minutos. Qual desses três seriam? Vou olhar os vídeos hoje pela noite em casa, estou sem caixa de som e fone de ouvido para assistir aqui no trabalho.

    Grata,
    terça-feira, 9 de dezembro de 2008 17:27
  • Desculpa pela pergunta anterior a respeito dos vídeos. Não tinha lido direito sua resposta. Vou assistir o primeiro vídeo hoje pela noite e depois respondo se deu tudo certo ou se tenho alguma dúvida.

    Obrigada!




    terça-feira, 9 de dezembro de 2008 17:35
  • Olá,

    Assisti o primeiro vídeo, achei muito bom! Porém, estou com um problema... No início do vídeo é criaddo um DataSet e associado a ele um TableAdapter, é utilizada uma conexão com o SQL Server. O problema é que estou utilizando um banco chamado Sqlite e parece que pelo visual não existe suporte a esse banco. Vi que tem por Odbc, mas estou utilizando um servidor 64 bits e o Sqlite só tem suporte para 32 bits. Teria alguma outra forma de preencher esse DataSet?

    Grata,
    quarta-feira, 10 de dezembro de 2008 12:25
  • Michele, eu nunca vio Sqlite, mas vc tem como preencher um dataSet com o resultado de uma busca feita ao Sqlite?

    Se sim, vc pode preencher um dataSet ou mesmo um dataSource e passar o mesmo para o report, eu trouxe o meu resultado a partir de webService, veja o código abaixo, não sei se te ajuda.

    //retorna uma lista de objetos que na verdade será apenas 1 objeto carregado, utilizando um parametro vindo por querystring
    List<SG.WsLicencaAmbiental.ViewLicencaAmbiental> listaViewsLicenca = SG.LicencaAmbientalSG.ConsultarViewLicencaPorCodigo(Convert.ToInt64(Page.ClientQueryString));
     //preenche o ReportDataSource com o objeto vindo do método,

                ReportDataSource reportDataSource = new ReportDataSource("ViewLicencaAmbiental", listaViewsLicenca);
               
                rpvEmissaoLicencas.LocalReport.DataSources.Add(reportDataSource);

    outra forma


                System.Data.DataSet ds = SG.LicencaAmbientalSG.ConsultarDataSetPorCodigo(Convert.ToInt64(Page.ClientQueryString));

    Vc carrega o dataSet e depois passa o mesmo diretamente ao report.

    Um Abraço
    João Pires
    quarta-feira, 10 de dezembro de 2008 12:38
  • Olá Michelle e João Pires !

     

     

    Para fazer um relatório utilizando o Crystal Reports ou ReportViewer é necessário criar um DataSet (arquivo XML com a lista de campos) para fazer o designer do relatório. O problema é que nem todos os providers para .NET oferecem recurso visual para fazer a contrução do DataSet.

     

    Neste caso, vc pode fazer um XML na mão para fazer a parte visual do relatório.

     

    Um link com um exemplo de um Relatório utilizando Reportview e arquivo XML

    http://www.c-sharpcorner.com/UploadFile/mahesh/XmlReports04182007115639AM/XmlReports.aspx

     


    [ ]'s

     Laércio.


    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

     

     

     

     

     

     

    quarta-feira, 10 de dezembro de 2008 14:04
    Moderador
  • Obrigada pela ajuda gente. Mas, não estou conseguindo fazer o relatório.

    João Pires, preenchi um dataSet a partir de um método que tenho e tentei passar para o relatório da seguinte maneira:

    ReportViewer1.ProcessingMode = ProcessingMode.Local;
    ReportViewer1.LocalReport.ReportPath = "Relatorio.rdlc";

    ReportDataSource dataSource = new ReportDataSource();
    dataSource.Name = "dsDadosRelatorio";
    dataSource.Value = ds.Tables["dadosRelatorio"];;

    ReportViewer1.LocalReport.DataSources.Clear();
    ReportViewer1.LocalReport.DataSources.Add(dataSource);
    ReportViewer1.LocalReport.Refresh();

    Mas não deu certo... Apareceu a seguinte mensgaem de erro: A data source instance has not been supplied for the data source 'DataSet1_DataTable1'.

    Laércio, tentei acompanhar os passos do site que me passou para fazer o relatório, mas no meu arquivo .rdlc não tem a opção 'add new item', tem apenas 'add new data source'.

    Poderiam me ajudar?


    Abraços,





    quinta-feira, 11 de dezembro de 2008 16:46
  • Boa tarde Michelle

    para o DataSource por código funcionar, você também deve expecifica-lo no design do relatório


    Se você seguir o vídeo disponível para download do Laércio, (Tópico fixo no fórum) verá que na hora de criar o "dataset" pelo designer, acontece o seguinte:

    -Abra o relatório no modo designer: quando você clica na aba Report -> DataSource, ele trará para você a lista dos Datasources do Projeto. Você deve escolher o mesmo que você esta usando no seu código "dsDadosRelatorio". O que acontece é, você não tem a opção de adicionar esse DataSource, e sim algum outro DataSource nomeado por "dsDadosRelatorio_NomedaTabela". Escolha aí o DataSource que você usará, sendo este a procedure, view, table etc. Renomeie ele para o nome que está no seu código ("dsDadosRelatorio"). feche a janela

    -Por último, vá na tabela do Relatório, selecione as suas propriedades, e coloque o DataSetName que esta na combo, que será o "dsDadosRelatorio"


    Provavelmente continuará dando erro por causa do nome do relatório. Este tem que ser referenciado por caminho absoluto (ex. "C:\aplicacao\...\....\....NomeDoRelatorio.rdlc").


    Se não funcionar, procure dar uma olhada nos vídeos do Laércio no msdn media center. o link está no tópico fixo do fórum na sessão de relatórios (esta).


    Espero ter ajudado,
    Paulo Eduardo Bueno
    quinta-feira, 11 de dezembro de 2008 17:09
  • Olá Paulo,

    Consegui! Apanhei um pouco, mas deu certo.. Além do que comentou, tive que criar um DataTable no DataSet com os campos necessários.

    Obrigada a todos que me ajudaram!!

    Abraços,

    sexta-feira, 12 de dezembro de 2008 00:42