none
Mostrar Dados ReportViewer C# RRS feed

  • Pergunta

  • Bom dia!

    Caros colegas eu criei um relatório para gerar pedido de compras.
    Conforme observei em um webcast do próprio fórum eu consegui criar um DataSet com meu banco MySQL, selecionar os campos criar o design do relatório e tudo mais.
    O problema é que meus dados não estão aparecendo no relatório porque eu não consegui evoluir no código própriamente dito. Preciso saber se alguém pode dar um exemplo ou link onde eu possa ver como trabalhar meu código fonte para que estes dados sejam mostrados.
    Quando eu criei um form para visualizar meu relatório eu apontei para o Data Souce criado porém a parte do código para que o relatório seja mostrado eu não consegui...

    Preciso de um força...

    Valeuu grande abraço a todos.


    Léo
    quarta-feira, 7 de janeiro de 2009 13:13

Respostas

  • Então, ao criar o dataset pelo wizard você definiu a QUERY (consulta) para determinar os pedidos que seriam retornados do banco de dados, este wizard gera um arquivo (.xsd), com a definição do dataset, para você alterar esta consulta basta você abrir este arquivo, clicar com o botão direito sobre o tableadapter refetente a consulta e clicar em Configure, então supondo que sua consulta anterior estivesse assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO (Aonde estaria retornando todos os pedidos)

    você colocaria assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO WHERE NUMERO_PEDIDO = @NUMERO_PEDIDO
    (Neste caso você retornaria somente um pedido de acordo com o número passado como parâmetro)

    Feito isto, o método Fill automaticamente receberá mais um parâmetro (além do dataSet) que é justamente o número do pedido:

    private void Form2_Load(object sender, EventArgs e)
            {

    int numeroPedido = 2;

               
                this.pedidoTableAdapter.Fill(this.DataSet1.pedido,numeroPedido);


                this.reportViewer1.RefreshReport();
            }


    Existe também uma forma de tratar o recebimento ou não do parâmetro, por exemplo algumas vezes eu poderia retornar todos os pedidos e outras vezes somente um pedido especifico, aí neste caso ficaria assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO WHERE (NUMERO_PEDIDO IS NULL OR
    NUMERO_PEDIDO = @NUMERO_PEDIDO)

    Ou seja se número do pedido passado como parâmetro for nulo retornará todos, caso contrário retornará somente um pedido especifico, aí no código poderia ficar assim no evento de click de um botao filtrar por exemplo:


    private void Button1_Click(object sender, EventArgs e)
            {

    if(!string.isNullOrEmpty(txtNumeroPedido.Text))
    {
    this.pedidoTableAdapter.Fill(this.DataSet1.pedido,int.Parse(txtNumeroPedido.Text));
    }
    else
    {
    this.pedidoTableAdapter.Fill(this.DataSet1.pedido,null);
    }           
           

                this.reportViewer1.RefreshReport();
            }


    Espero ter ajudado
    sexta-feira, 9 de janeiro de 2009 16:03

Todas as Respostas

  • Bom Dia, olha como você está em um forum de desenvolvimento geral em .NET fica um pouco confuso para saber qual ReportViewer você está usando, pois até onde eu sei existem 3 ou 4, e o funcionamento deles pode ser um pouco diferente:

    ReportViewer WinForms --> Microsoft.Reporting.WinForms.ReportViewer

    ReportViewer WebForms -->
    Microsoft.Reporting.WebForms.ReportViewer

    ReportViewer Crystal --> CrystalDecisions.Windows.Forms.CrystalReportViewer

    No ultimo caso eu faço da seguinte forma

    private void loadReport()
    {
    Administrativo.Rpt.RelatorioHorasTrabalhadas rptHorasTrabalhadas = new Administrativo.Rpt.RelatorioHorasTrabalhadas();

    rptHorasTrabalhadas.SetParameterValue("@DATA_INICIAL", dtpDataInicial.Value);
    rptHorasTrabalhadas.SetParameterValue("@DATA_FINAL", dtpDataFinal.Value);

    rptHorasTrabalhadas.SetParameterValue("@ID_USUARIO", null);
    rptHorasTrabalhadas.SetDatabaseLogon("login", "senha");

    crystalReportViewer1.ReportSource = rptHorasTrabalhadas; //Veja se não é esta linha que está faltando

    }


    Se não for este o ReportViewer que você está falando peço que especifique qual
    quarta-feira, 7 de janeiro de 2009 15:07
  • Marcus, você tem razão... na verdade o que eu me refiro é o "ReportViewer WinForms".
    Bom até o momento eu até consegui evoluir um pouco no sentido de conseguir mostrar meus dados no relatório pois no momento em que eu criei a parte de visualização eu apontei para meu DataSet criado.
    Porém a dúvida ainda permanece pois eu quero trabalhar com filtros etc... para que o usuário consiga trabalhar de diversas formas com o relatório seja por exemplo informações de nível analíto ou sintético.

    é possível ???


    abraço
    quarta-feira, 7 de janeiro de 2009 15:52
  • Olá, se você estiver usando um DataSet Tipado com Table Adapter basta na montagem da query você pode incluir os filtros
    por exemplo:

    SELECT ID_USUARIO,NOME FROM USUARIO WHERE (@NOME IS NULL OR NOME LIKE '%'+ @NOME +'%')

    Na query a cima se o nome tiver nulo ele retornará todos, ai na hora de executar o método Fill do TableAdapter você já pode passar o parâmetro

    SeuTableAdapter.Fill(SeuDataSet, "marcus");

    Agora se você quiser passar os parâmetros diretamente para o relatório seria algo deste tipo:


    {
        ReportParameter parametro1 = new ReportParameter("NOME", "Marcus");
        ReportViewer1.LocalReport.ReportPath = "caminhodoarquivodorelatorio";
        ReportViewer1.LocalReport.SetParameters(parametro1);
        ReportViewer1.RefreshReport();
    }

    quarta-feira, 7 de janeiro de 2009 16:30
  • Lembrando que para usar a segunda opção você tem que adicionar:

    using Microsoft.Reporting.WinForms no topo da página
    quarta-feira, 7 de janeiro de 2009 16:31
  • Léo,

     

         Você fez o download dos 3 vídeos e dos arquivos com código fonte? Todos os exemplos que eu apresentei nos vídeos (inclusive em MySQL) estão disponiveis para download no próprio Media Center.

     

          Os exemplos estão em VB.NET mais é muito fácil converter para C# .

      

         

    Uma outra dica:

     

    Criei um tópico fixo no fórum MSDN com algumas dicas  sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 3 vídeos com vários exemplos de como construir relatórios com os componentes, licença, distribuição, service packs, etc.):

     

    Inclusive com um exemplo passo a passo de como criar um relatório com Crystal Reports e ReportViewer utilizando grupos.

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21

     


    [ ]'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, 7 de janeiro de 2009 17:00
    Moderador
  • Pra mim não ficou muito claro pois nunca usei o reportviewer, mais seguinte quando eu gerei o DataSet foi pelo wizard sabe, tipo ao criar um DataSet tem a opção de selecionar os campos etc...
    Associei ao componente Reportviewer o ReportXXX.rdlc depois de devidamente configurado o relatório.
    Quando eu abro o Form2.cs te o seguinte código:

            private void Form2_Load(object sender, EventArgs e)
            {
                // TODO: This line of code loads data into the 'DataSet1.pedido' table. You can move, or remove it, as needed.
                this.pedidoTableAdapter.Fill(this.DataSet1.pedido);


                this.reportViewer1.RefreshReport();
            }

    Só que no meu caso eu preciso que seja impresso um pedido por vez e não um relatório com todos os pedidos.
    A minha pergunta é, eu consigo alterar o select dentro deste código ? e de que forma poderia fazer isto?

    Pq ao meu ver seria muito mais fácil eu alterar no próprio fonte Form2.cs se é que isto é possível.

    Valeuu
    quarta-feira, 7 de janeiro de 2009 20:03
  • Então, ao criar o dataset pelo wizard você definiu a QUERY (consulta) para determinar os pedidos que seriam retornados do banco de dados, este wizard gera um arquivo (.xsd), com a definição do dataset, para você alterar esta consulta basta você abrir este arquivo, clicar com o botão direito sobre o tableadapter refetente a consulta e clicar em Configure, então supondo que sua consulta anterior estivesse assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO (Aonde estaria retornando todos os pedidos)

    você colocaria assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO WHERE NUMERO_PEDIDO = @NUMERO_PEDIDO
    (Neste caso você retornaria somente um pedido de acordo com o número passado como parâmetro)

    Feito isto, o método Fill automaticamente receberá mais um parâmetro (além do dataSet) que é justamente o número do pedido:

    private void Form2_Load(object sender, EventArgs e)
            {

    int numeroPedido = 2;

               
                this.pedidoTableAdapter.Fill(this.DataSet1.pedido,numeroPedido);


                this.reportViewer1.RefreshReport();
            }


    Existe também uma forma de tratar o recebimento ou não do parâmetro, por exemplo algumas vezes eu poderia retornar todos os pedidos e outras vezes somente um pedido especifico, aí neste caso ficaria assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO WHERE (NUMERO_PEDIDO IS NULL OR
    NUMERO_PEDIDO = @NUMERO_PEDIDO)

    Ou seja se número do pedido passado como parâmetro for nulo retornará todos, caso contrário retornará somente um pedido especifico, aí no código poderia ficar assim no evento de click de um botao filtrar por exemplo:


    private void Button1_Click(object sender, EventArgs e)
            {

    if(!string.isNullOrEmpty(txtNumeroPedido.Text))
    {
    this.pedidoTableAdapter.Fill(this.DataSet1.pedido,int.Parse(txtNumeroPedido.Text));
    }
    else
    {
    this.pedidoTableAdapter.Fill(this.DataSet1.pedido,null);
    }           
           

                this.reportViewer1.RefreshReport();
            }


    Espero ter ajudado
    sexta-feira, 9 de janeiro de 2009 16:03
  • Boa Tarde Marcus

    Perfeito, ficou exatamente como eu precisava.

    Obrigado pela ajuda.

    Abraço
    quinta-feira, 15 de janeiro de 2009 17:02
  • http://www.stjhimy.com/2009/10/25/reportviewer-and-linq-to-sql-a-better-way-to-report-your-applications/

    Esse link facilita pra fazer os relatórios das aplicações, escrevi faz pouco tempo.

    Espero que ajude.
    • Sugerido como Resposta JC_KAKA sábado, 22 de maio de 2010 23:43
    domingo, 25 de outubro de 2009 05:05
  • Olá Boa Noite, alguem poderia me enviar um exemplo com report vierwer com parametros.

     

    Não estou conseguindo de jeito nenhum fazer o reportviewer com parametros;

     

    Já vi em vários sites inclusive aqui, mas não consegui acertar na criação do parametro, devo estar pecando em algum detalhe. Por isso peço por gentileza algum exmplo com parametro enviar para mim ou postar pra mim.

     

    Estou usuando o vs 2008 e programando em c#. Obrigado a todos e fico no aguardo!!!!!

    sábado, 22 de maio de 2010 23:49
  • Então, ao criar o dataset pelo wizard você definiu a QUERY (consulta) para determinar os pedidos que seriam retornados do banco de dados, este wizard gera um arquivo (.xsd), com a definição do dataset, para você alterar esta consulta basta você abrir este arquivo, clicar com o botão direito sobre o tableadapter refetente a consulta e clicar em Configure, então supondo que sua consulta anterior estivesse assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO (Aonde estaria retornando todos os pedidos)

    você colocaria assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO WHERE NUMERO_PEDIDO = @NUMERO_PEDIDO
    (Neste caso você retornaria somente um pedido de acordo com o número passado como parâmetro)

    Feito isto, o método Fill automaticamente receberá mais um parâmetro (além do dataSet) que é justamente o número do pedido:

    private void Form2_Load(object sender, EventArgs e)
            {

    int numeroPedido = 2;

               
                this.pedidoTableAdapter.Fill(this.DataSet1.pedido,numeroPedido);


                this.reportViewer1.RefreshReport();
            }


    Existe também uma forma de tratar o recebimento ou não do parâmetro, por exemplo algumas vezes eu poderia retornar todos os pedidos e outras vezes somente um pedido especifico, aí neste caso ficaria assim:

    SELECT NUMERO_PEDIDO,DATA_PEDIDO FROM PEDIDO WHERE (NUMERO_PEDIDO IS NULL OR
    NUMERO_PEDIDO = @NUMERO_PEDIDO)

    Ou seja se número do pedido passado como parâmetro for nulo retornará todos, caso contrário retornará somente um pedido especifico, aí no código poderia ficar assim no evento de click de um botao filtrar por exemplo:


    private void Button1_Click(object sender, EventArgs e)
            {

    if(!string.isNullOrEmpty(txtNumeroPedido.Text))
    {
    this.pedidoTableAdapter.Fill(this.DataSet1.pedido,int.Parse(txtNumeroPedido.Text));
    }
    else
    {
    this.pedidoTableAdapter.Fill(this.DataSet1.pedido,null);
    }           
           

                this.reportViewer1.RefreshReport();
            }


    Espero ter ajudado

    Sem querer dar uma de coveiro em um post de 2009, mas precisei fazer um comentário. Cara eu to a quase 1 semana tentando fazer isso que tu mostrou, precisava criar um reportviewer mas com uma cláusula WHERE na query e não sabia como fazer, tentei de tudo. Mas não fazia ideia q dentro do menu "Configure" eu podia usar o "@data", pois eu faço isso mas com o MySqlCommand... E bastava apenas passar o valor na chamada do método, muito simples cara, mais uma valiosa lição aprendida, só queria dizer.... MUITO OBRIGADO MARCUS PAULO GHELLI =) continue compartilhando seu conhecimento com nos mais desprovidos deste...

    Valeu Cara ;D

    terça-feira, 2 de outubro de 2012 18:48