Usuário com melhor resposta
ReportViewer - Dados faltando no relatorio

Pergunta
-
Ola pessoal
Estou com o seguinte problema: no cliente (detectei ate agora em 2 pcs), o relatorio exibe somente os 3 ultimos registros de uma consulta, sendo que a mesma retorna bem mais que isso. Porem, quando clico no botao Visualizar para refazer a consulta e chamar novamente o relatorio, os dados todos aparecem!!
A aplicação é Windows, .NET 2.0 (usando o Report Viewer).
No meu formulario existe no topo os dados para filtro do relatorio e o mencionado botao Visualizar. Abaixo deles vem o controle ReportViewer, o qual chamei de rvPrintPreview.
No botao Visualizar faço a consulta e chamo o meu relatorio da seguinte forma:// pego os valores dos campos do formulario e preencho nas variaveis DtInicial, dtFinal, codContaBancaria // .................... // consulta movimentacoes MovimentacoesBLL movimentacoesBLL = new MovimentacoesBLL(); DataTable dataTableMovim = movimentacoesBLL.ConsultaRelatorio(dtInicial, dtFinal, codContaBancaria); // consulta dados da conta selecionada ContasBancariasBLL contasBancariasBLL = new ContasBancariasBLL(); DataTable dataTableContaB = contasBancariasBLL.ConsultaSaldosPorConta(codContaBancaria); // define parametros do relatorio ReportParameter[] arrayParametros = { new ReportParameter("DtInicial", dtInicial.Value.ToShortDateString()), new ReportParameter("DtFinal", dtFinal.Value.ToShortDateString()), new ReportParameter("ContaBancaria", contaBancaria) }; rvPrintPreview.LocalReport.SetParameters(arrayParametros); // define os datasources do relatorio rvPrintPreview.LocalReport.DataSources.Clear(); ReportDataSource rptDataSource1 = new ReportDataSource("datasourceMovimentacoes", dataTableMovim); ReportDataSource rptDataSource2 = new ReportDataSource("datasourceContasBancarias", dataTableContaB); rvPrintPreview.LocalReport.DataSources.Add(rptDataSource1); rvPrintPreview.LocalReport.DataSources.Add(rptDataSource2); // muda modo de exibicao para layout de impressao rvPrintPreview.SetDisplayMode(DisplayMode.PrintLayout); rvPrintPreview.ZoomMode = ZoomMode.PageWidth; // exibe relatorio rvPrintPreview.RefreshReport();
Detalhe que nunca detectei esse erro nas máquinas de desenvolvimento (casa e escritorio). E se eu clicar no Visualizar de novo os dados aparecem corretamente.
Outro detalhe é que se fecho o form, abro novamente e consulto, AS VEZES, ja vem corretamente.
Muito estranho.....
Seria algum problema no componente ReportViewer instalado nas maquinas?
Ou no código??
HELP!
[]s
Respostas
-
Bom, depois de muita procura, acabei encontrando alguns post uteis no forum americano.
Segundo li este bug acontece devido ao uso do DisplayMode no layout de impressao (PrintLayout).
A solucao (ou "gambiarra") dada foi setar o Display e o Zoom Mode no event RenderingComplete do controle:
private void rvPrintPreview_RenderingComplete(object sender, RenderingCompleteEventArgs e) { rvPrintPreview.SetDisplayMode(DisplayMode.PrintLayout); rvPrintPreview.ZoomMode = ZoomMode.PageWidth; }
Em complemento, ao fazer isso, toda vez que se clica no botao da Toolbar para mudar o layout de impressao, ele chama o evento e como nele o modo de impresso e configurado para PrintLayout, o botao nao faz nada, ou seja, o layout da pagina sempre ficara como PrintLayout (o que, no meu caso, resolve 2 problemas de uma só vez, pq eu sempre quis desabilitar só este botao, mas nao havia jeito).
Caso, mesmo assim, voce queira manter a funcionalidade do botao para que possa alterar o modo de exibicao, ha outras "gambis" no post que achei, embora eu nem sequer tenha testado.
O link é este:
http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/d03a895c-7d10-4e6d-ae2b-e737b915ad3e/
OBS.: Instalei e fiz testes no cliente e o numero de paginas na toolbar sempre foi exibido corretamente! UFA! (Qquer bug eu relato aqui)
OBS. 2: Este bug ocorre no Visual Studio 2005 (nao sei se no ReportViewer do 2008 o prob ja foi corrigido)
[]s e espero ter colaborado.
- Marcado como Resposta Robson Castilho ® sábado, 14 de março de 2009 23:45
Todas as Respostas
-
Mais um detalhe: mesmo quando o relatorio mostra todas as paginas corretamente, na barra do ReportViewer (onde mostra 1 de X....) o total de páginas fica "perdido", ora mostrando certo ora mostrando um total de 0 ou outro valor menor que o real.
Desinstalei o ReportViewer de 1 maquina problematica e reinstalei, porem nada mudou.
Alguém??
[]s
-
-
-
Bom, depois de muita procura, acabei encontrando alguns post uteis no forum americano.
Segundo li este bug acontece devido ao uso do DisplayMode no layout de impressao (PrintLayout).
A solucao (ou "gambiarra") dada foi setar o Display e o Zoom Mode no event RenderingComplete do controle:
private void rvPrintPreview_RenderingComplete(object sender, RenderingCompleteEventArgs e) { rvPrintPreview.SetDisplayMode(DisplayMode.PrintLayout); rvPrintPreview.ZoomMode = ZoomMode.PageWidth; }
Em complemento, ao fazer isso, toda vez que se clica no botao da Toolbar para mudar o layout de impressao, ele chama o evento e como nele o modo de impresso e configurado para PrintLayout, o botao nao faz nada, ou seja, o layout da pagina sempre ficara como PrintLayout (o que, no meu caso, resolve 2 problemas de uma só vez, pq eu sempre quis desabilitar só este botao, mas nao havia jeito).
Caso, mesmo assim, voce queira manter a funcionalidade do botao para que possa alterar o modo de exibicao, ha outras "gambis" no post que achei, embora eu nem sequer tenha testado.
O link é este:
http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/d03a895c-7d10-4e6d-ae2b-e737b915ad3e/
OBS.: Instalei e fiz testes no cliente e o numero de paginas na toolbar sempre foi exibido corretamente! UFA! (Qquer bug eu relato aqui)
OBS. 2: Este bug ocorre no Visual Studio 2005 (nao sei se no ReportViewer do 2008 o prob ja foi corrigido)
[]s e espero ter colaborado.
- Marcado como Resposta Robson Castilho ® sábado, 14 de março de 2009 23:45