none
MVC + ReportViewer (Repasse de parametros para o relatório) RRS feed

  • Pergunta

  • Pessoal,

     

    tenho a seguinte dúvida: eu tenho uma aplicação escrita em C# .NET utilizando MVC 3. Para geração dos meus relatórios eu "mesclei" uma chamada via jquery de solicitação de geração do relatório usando também webforms (foi  a única forma que encontrei de gerar relatórios utilizando MVC). Entretanto a minha dúvida consiste no seguinte caso:

    Eu tenho dois modos de exibição de relatório: um completo e outro resumido. No caso o usuário define através de um radio button qual dos dois tipos ele quer. No meu relatório eu implementei a chamada de subrelatórios por que para o mesmo arquivo eu utilizado a mesma procedure, entretanto uma de modo mais agrupado que a outra. Só que na hora de passar a informação que foi escolhida na minha VIEW (resumido ou completa) e enviar para o outro lado um parâmetro qualquer definidodefinido  (@ParameterReport1, por exemplo), eu não consigo fazê-lo. Alguem saberia dizer como se faz isso? Já pesquisei em todos os cantos possíveis. 

    Resumindo,

    1. passar parâmetro (submit) da minha view através de um componente de tela qualquer (combobox, radio, check...) e passar para meu relatório (.rdlc) recuperando este mesmo valor num parâmetro qualquer (@ParameterReport1).

     

    Abs!


    Leandro Alves
    quarta-feira, 27 de julho de 2011 18:06

Respostas

  • Olá Leandro!

    Consegui reproduzir esse "erro"...

    Ocorre que após o ReportViewer receber seus parâmetros, ele dá um Refresh e consequentemente, um PostBack na página...

    Para contornar isso, faça a seguinte verificação:

    // Executa somente se não for PostBack
    if (!IsPostBack)
        {
          ReportParameter[] parametro =
          {
            new ReportParameter("parametro1",stringParametro1),
            new ReportParameter("parametro2",stringParametro2),
    
          };
    
          ReportViewer1.LocalReport.SetParameters(parametro); 
        }
    

     

    Até mais, abraços.
    • Marcado como Resposta Leandro Portnoy quarta-feira, 27 de julho de 2011 19:18
    quarta-feira, 27 de julho de 2011 19:12

Todas as Respostas

  • Olá Leandro!

    Já tentou assim?

       ReportParameter[] parametros = 
    
      {
    
       new ReportParameter("parametro1", stringParametro),
    
       new ReportParameter("parametro2", stringParametro2),
    
      };

    ReportViewer1.LocalReport.SetParameters(parametros);

    parametro1 e parametro2 são @parametro1 e @parametro2 lá no seu .rdlc, que você pode colocar em uma TextBox por exemplo...

    Vê se te ajuda...

    Até mais, abraços.
     


    quarta-feira, 27 de julho de 2011 18:11
  • Vou tentar,

    jogo isso no page_load da minha view ?


    Leandro Alves
    quarta-feira, 27 de julho de 2011 18:13
  • Depende, se for logo no load que você quer executá-lo, então pode ser...
    quarta-feira, 27 de julho de 2011 18:16
  • Jefferson,

     

    por algum motivo ficou em Loop. Coloquei no Page_Load da página. Saberia dizer o que pode tá ocorrendo ?


    Leandro Alves
    quarta-feira, 27 de julho de 2011 18:29
  • Olá Leandro!

    Que estranho... Então tente colcar no Método de um botão, só para testar...

    quarta-feira, 27 de julho de 2011 18:33
  • Olá Leandro!

    Consegui reproduzir esse "erro"...

    Ocorre que após o ReportViewer receber seus parâmetros, ele dá um Refresh e consequentemente, um PostBack na página...

    Para contornar isso, faça a seguinte verificação:

    // Executa somente se não for PostBack
    if (!IsPostBack)
        {
          ReportParameter[] parametro =
          {
            new ReportParameter("parametro1",stringParametro1),
            new ReportParameter("parametro2",stringParametro2),
    
          };
    
          ReportViewer1.LocalReport.SetParameters(parametro); 
        }
    

     

    Até mais, abraços.
    • Marcado como Resposta Leandro Portnoy quarta-feira, 27 de julho de 2011 19:18
    quarta-feira, 27 de julho de 2011 19:12
  • Jefferson,

     

    você salvou uma pobre alma! Corretíssimo! Obrigadaço!

     

    :))


    Leandro Alves
    quarta-feira, 27 de julho de 2011 19:17