Usuário com melhor resposta
Gerar relatório em tempo de exceução a partir de um DataTable ou DataSet no RepotViewer

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,
Respostas
-
Boa tarde Michellepara 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
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 -
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, -
-
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, -
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 querystringReportDataSource reportDataSource = new ReportDataSource("ViewLicencaAmbiental", listaViewsLicenca);
List<SG.WsLicencaAmbiental.ViewLicencaAmbiental> listaViewsLicenca = SG.LicencaAmbientalSG.ConsultarViewLicencaPorCodigo(Convert.ToInt64(Page.ClientQueryString));
//preenche o ReportDataSource com o objeto vindo do método,
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 -
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
[ ]'sLaércio.
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado. -
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, -
Boa tarde Michellepara 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 -