Inquiridor
ReportViewer Parametros

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(); }
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! -
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?
- Editado ReportViewer - Passando Parametros terça-feira, 12 de junho de 2012 18:40 Adicionado mais informações
-
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! -
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.
-
-
-
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+