none
ReportViewer Parametros RRS feed

  • Pergunta

  • Buenas Gurus!

    Galera to com uma dúvida que esta me matando...

    Estou usando um WindowsForm C# onde tem os dados cliente e data inicial e data final da consulta, apos efetuar a busca ele retorna em um datagridviewer todos os dados referente a consulta. No datagridviewer tenho uma coluna com checkbox onde posso selecionar os dados que eu quero que apareçam no relatório. Fazo uma varredura com forech no grid e pego os dados que quero e largo para dentro de um List<string>, ate ai tudo bem. Meu problema é passar os IDS dos dados selecionados no checkbox para o relatorio. Eu criei no relatorio um parametro chamado @IDS onde setei que ele pode receber multiplos valores. Meu SQL (utilizo DB mysql) utiliza a clausula IN ( where idsXXX IN (@IDS)).

    Quando realizo a seleção de somente 1 registro ele gera o relatorio, quando seleciono mais de um ele não me retorna nada, traz sem dados o relatório. Alguém pode me dar uma LUZ.

    Segue códigos:

    Código para varrer o datagrid:

            private void buttonAtualizar_Click(object sender, EventArgs e)
            {
    
                int totReg = dataGridViewConhecimentos.Rows.Count;
                int contador = 0;
                string ids = "";
                List<string> listaAWB = new List<string>();
    
                foreach (DataGridViewRow check in dataGridViewConhecimentos.Rows) 
                {
                    if ((bool)check.Cells["checkes"].FormattedValue)
                    {
                        contador++;
                        string texto = check.Cells[3].Value.ToString();
                        listaAWB.Add(texto);
                    }
                 }
                FormRelatorioConhecimento frmRelConhecimento = new FormRelatorioConhecimento(comboBoxClientes.SelectedValue.ToString(), listaAWB, dateTimePickerDataIni.Value, dateTimePickerDataFim.Value);
                frmRelConhecimento.Show();           
                
            }

    Código que chama o relatório passando os parametros:

    string l_codigoCliente;
            List<string> l_ids = new List<string>();
            DateTime l_dataIni;
            DateTime l_dataFim;
    
            public FormRelatorioConhecimento(string codigoCliente, List<string> ids, DateTime dataIni, DateTime dataFim)
            {
                InitializeComponent();
                l_codigoCliente = codigoCliente;
                l_ids = ids;
                l_dataIni = dataIni;
                l_dataFim = dataFim;
            }
    
            private void FormRelatorioConhecimento_Load(object sender, EventArgs e)
            {
    
                string dadosIDS = string.Join(", ", l_ids.ToArray());            
    
                ReportParameter p1 = new ReportParameter("pCodigoCliente", l_codigoCliente.ToString());
                ReportParameter p2 = new ReportParameter("pDataIni", l_dataIni.ToString("yyyy-MM-dd"));
                ReportParameter p3 = new ReportParameter("pDataFim", l_dataFim.ToString("yyyy-MM-dd"));
                ReportParameter p4 = new ReportParameter("pIds", dadosIDS);
                reportViewer1.LocalReport.SetParameters(new ReportParameter[] { p1, p2, p3, p4});
    
                this.clienteTableAdapter.Fill(this.collectexpressDataSet.cliente, Convert.ToInt32(l_codigoCliente), l_dataIni, l_dataFim, dadosIDS);
                this.reportViewer1.RefreshReport();            
            }

    terça-feira, 12 de junho de 2012 16:31

Todas as Respostas

  • Buenas,

    vc ja testou a Query que retorna esse relatorio passando todos os parametros?

    vc deve eliminar possibilidades, quando seleciona um o relatorio retorna dados e quando seleciona mais de um nao retorna NADA,

    bom se nao esta disparando erro no codigo, acredito que vc deve analizar a sua Query  que retorna esses dados  e verificar se realmente esta funcionando quando se passa mais de um parametro.

    faça esse teste, qualquer novidade vc volta aqui blz

    boa sorte!


    Herbert Agles
    Se a resposta contribuiu com a sua necessidade, não se esqueça de marcá-la, assim você beneficiará outros usuários. Sua dúvida também pode ser as de outros!

    terça-feira, 12 de junho de 2012 18:00
  • select re.DSCREGIAO, vl.PESO, cl.E_MAILCONTATO, cl.RAZAOSOCIAL, cl.CNPJ, cl.CIDADE, cl.BAIRRO, cl.UF, cl.CEP, cl.RUA, cl.FONE, cl.FAX, cl.CONTATO, co.IDCONHECIMENTO, co.NUMEROAWB, co.QUANTIDADE, co.REMETENTE, co.DATAREMESSA, co.VLRTABELA, co.VLRFINAL, co.TXDESCONTO, co.TXIMPOSTO, co.TXCOMBUSTIVEL, co.VLRDESCONTO, co.VLRCOMBUSTIVEL, co.VLRIMPOSTO
    from cliente as cl
    INNER JOIN conhecimento as co
    ON cl.IDCLIENTE = co.IDCLIENTE
    INNER JOIN valorplano as vl
    ON co.IDVALOR = vl.IDVALOR
    INNER JOIN regiao as re
    ON co.IDREGIAO = re.IDREGIAO
    where cl.idcliente = @pCodigoCliente AND
    co.DATAREMESSA BETWEEN (@pDataIni ) AND (@pDataFim) AND
    co.NUMEROAWB IN (@pIds)
    AND
    co.STATUS = 'A'
    SQL que estou usando.


    Ja testei direto no banco a query e funciona perfeitamente. :P

    Olha o teste passando no braço os parametros:

    Com sucesso:

    Com retorno vazio:

    O problema é no relatório mesmo......alguma idéai?


    terça-feira, 12 de junho de 2012 18:24
  • da uma olhada neste post

    http://social.msdn.microsoft.com/Forums/pt/mvcpt/thread/c67049f7-80f9-4350-b88d-ea0e744696c9

    http://msdn.microsoft.com/pt-br/library/ms251790%28v=vs.110%29.aspx

    http://marlosfabris.com/blog/?tag=report

    talve isso possa lhe ajudar


    Herbert Agles
    Se a resposta contribuiu com a sua necessidade, não se esqueça de marcá-la, assim você beneficiará outros usuários. Sua dúvida também pode ser as de outros!

    terça-feira, 12 de junho de 2012 18:44
  • Amigo, agradeço o interesse de ajudar, mas os links não ajudaram.

    Realmente não sei mais o que fazer para funcionar. Já testei tudo, você vendo o meu código e a forma que foi passado não ve nada de errado, anormal que possa estar gerando este problema?

    Abraços e  mais uma vez grato pelo apoio.

    terça-feira, 12 de junho de 2012 19:00
  • Ninguem mais!?
    quinta-feira, 14 de junho de 2012 19:00
  • da uma testada na sua query direto no sql, ve se nao é nenhum problema dos joins, 
    sexta-feira, 19 de outubro de 2012 13:08

  •         private void FormRelatorioConhecimento_Load(object sender, EventArgs e)
            {
    
                string dadosIDS = string.Join(", ", l_ids.ToArray());            
    
                ReportParameter p1 = new ReportParameter("pCodigoCliente", l_codigoCliente.ToString());
                ReportParameter p2 = new ReportParameter("pDataIni", l_dataIni.ToString("yyyy-MM-dd"));
                ReportParameter p3 = new ReportParameter("pDataFim", l_dataFim.ToString("yyyy-MM-dd"));
                ReportParameter p4 = new ReportParameter("pIds", dadosIDS);
                reportViewer1.LocalReport.SetParameters(new ReportParameter[] { p1, p2, p3, p4});
    
                this.clienteTableAdapter.Fill(this.collectexpressDataSet.cliente, Convert.ToInt32(l_codigoCliente), l_dataIni, l_dataFim, dadosIDS);
                this.reportViewer1.RefreshReport();            
            }

    Buenas tchê , tudo tranquilo ? Passando só pra agradecer por este post, pois me ajudou bastante =)

    EU tinha um outro modo de passar os mesmos parâmetros, mas não anotei o code e acabei esquecendo. Tentei desta forma, fiz alguns ajustes e funcionou beleza =D

    Obrigado pelo post e T+

    segunda-feira, 22 de outubro de 2012 16:23