Ajuda! imprimir dados pesquisados com ireport (RESOLVIDO!)
19 respostas
murillo_smit
[b]Bom dia galera!
to com uma duvida a dias, criei uma aplicação onde nela pode pesquisar um cliente até ai funcionou tudo certo, agora eu coloquei um botei para
imprimir somento oque os dados do cliente que foi pesquisar, ai q ta minha duvida, alguem tem alguma ideia de como posso fazer issu?
conseguiu fazer uns relatorios no ireport pelo netbeans, imprimir tudo blz, mais eu quero para imprimir somento oq foi pesquisar!
segue uma imagem da aplicação.
Carregue uma lista do que foi pesquisado e envie como data Source para seu Jasper.
L
leopoldof
Eu uso de dois jeitos…dependendo da tela…
Uma é o que nosso amigo citou em cima…eu carrego todos os dados num arrayList e passo isso direto para o jasper que ele percorre a listagem e imprime os dados…
outra maneira é vc fazer um select interno no jasper e passar um parametro como continuação do where
Ex:
faz um sql interno no relatório usando o ireport assim
SELECTNOME,ENDERECO,ETCFROMCLIENTEWHERE@PARAM
depois quando vc vai chamar o relatório passa o parametro para o relatório esse parametro conteria algo parecido com
“CLIENTE.NOME = '” + cliente.getNome() + “’”
caso nao fosse pesquisado nada, passaria um parametro que não interferisse na pesquisa tipo… 1=1
Obs 1 -só não lembro direito se na query se define assim mesmo o parametro…(@param) acho que não é essa a sintaxe) mas de uma pesquisada nisso que vc acha fácil
Obs 2 - Tem que criar essa variável parametro no ireport antes de utilizá-la
quaresma
duas perguntas para você, pode ser perguntas tansas mas nao estou conseguindo fazer.
ali no botão imprimir oque vocÊ esta colocando para mandar o jasper imprimir “os que estao funcionando”
e como você esta modificando os tamanhos das colunas do jtable?
murillo_smit
Como seria esse isso? carregar uma lista do que foi pesquisado e enviar pro jasper como data source:?:
murillo_smit
leopoldof:
Eu uso de dois jeitos…dependendo da tela…
Uma é o que nosso amigo citou em cima…eu carrego todos os dados num arrayList e passo isso direto para o jasper que ele percorre a listagem e imprime os dados…
outra maneira é vc fazer um select interno no jasper e passar um parametro como continuação do where
Ex:
faz um sql interno no relatório usando o ireport assim
SELECTNOME,ENDERECO,ETCFROMCLIENTEWHERE@PARAM
depois quando vc vai chamar o relatório passa o parametro para o relatório esse parametro conteria algo parecido com
“CLIENTE.NOME = '” + cliente.getNome() + “’”
caso nao fosse pesquisado nada, passaria um parametro que não interferisse na pesquisa tipo… 1=1
Obs 1 -só não lembro direito se na query se define assim mesmo o parametro…(@param) acho que não é essa a sintaxe) mas de uma pesquisada nisso que vc acha fácil
Obs 2 - Tem que criar essa variável parametro no ireport antes de utilizá-la
Achei essa sua dica bem interessante so ñ entendi bem como fazer esse parametro! explica melhor! e depois qual o codigo para chamar o relatorio pelo botão imprimir?
murillo_smit
quaresma:
duas perguntas para você, pode ser perguntas tansas mas nao estou conseguindo fazer.
ali no botão imprimir oque vocÊ esta colocando para mandar o jasper imprimir “os que estao funcionando”
e como você esta modificando os tamanhos das colunas do jtable?
Qual IDE vc ta usando? se for o netbeans e bem simples! posta aki que eu te ajudo!
joaoorso
A idéia é criar uma lista de objetos
Personp1=newPerson(newLong(1),"Patrick","Lightbuddie");Personp2=newPerson(newLong(2),"Jason","Carrora");Personp3=newPerson(newLong(3),"Alexandru","Papesco");Personp4=newPerson(newLong(4),"Jay","Boss");// Store people in our dataSource list (normally would come from database).myList=newArrayList<Person>();myList.add(p1);myList.add(p2);myList.add(p3);myList.add(p4);
E enviar essa lista para que o jasper utilize cada ítem dela, como uma linha no seu relatório (data source)
Mas vc pode pesquisar outras maneiras de enviar. Independente do Struts.
O exemplo vai servir para melhorar seu entendimento.
Abraço .
murillo_smit
joaoorso:
A idéia é criar uma lista de objetos
Personp1=newPerson(newLong(1),"Patrick","Lightbuddie");Personp2=newPerson(newLong(2),"Jason","Carrora");Personp3=newPerson(newLong(3),"Alexandru","Papesco");Personp4=newPerson(newLong(4),"Jay","Boss");// Store people in our dataSource list (normally would come from database).myList=newArrayList<Person>();myList.add(p1);myList.add(p2);myList.add(p3);myList.add(p4);
E enviar essa lista para que o jasper utilize cada ítem dela, como uma linha no seu relatório (data source)
Mas vc pode pesquisar outras maneiras de enviar. Independente do Struts.
O exemplo vai servir para melhorar seu entendimento.
Abraço .
joaoorso essa sua dica é muito, mais pelo oq to vendo se eu utilizar essa maneira vou ter q refazer todo meu codigo ai ja ñ é vantage para min pois essa parte ja ta pronte e ja ta enviando para o banco de dados, então acho q será melhor utilizar um parametro no jasper!
oque vc acha?
joaoorso
É uma maneira de resolver …
Pega os filtros que o usuário fez e passa como parâmetro no seu Jasper.
A desvantagem de fazer dessa forma é que vc terá seu selec em 2 locais ( na aplicação e no Jasper)
Assim como a consulta será feita 2x no BD ( uma vez sem os filtros e a outra com )
falow !
quaresma
murillo_smit:
quaresma:
duas perguntas para você, pode ser perguntas tansas mas nao estou conseguindo fazer.
ali no botão imprimir oque vocÊ esta colocando para mandar o jasper imprimir “os que estao funcionando”
e como você esta modificando os tamanhos das colunas do jtable?
Qual IDE vc ta usando? se for o netbeans e bem simples! posta aki que eu te ajudo!
bah seria muito bom vc me da uma ajuda tirei um print da minha telaa
uso o netbens ja fiz todo relatorio tah prontinho só falta puxa
L
leopoldof
da maneira como o joaoorso citou também é facil…
Caso sua listagem de objetos que puchou do banco para adicionar na tabela não exista mais,
faça um for na tabela mesmo pegando seus valores e criando uma nova listagem de objetos
usando o método getValueAt da jtable… assim vc geraria uma nova listagem sem fazer um novo select no banco e enviaria isso para seu relatório
//Seu método para impressãopublicvoidimprimir(){StringtextoPesquisa=txfPesquisaCliente.getText();if(textoPesquisa.isEmpty()){textoPesquisa=" 1= 1 ";}Mapmp=newHashMap();mp.put("PARAM_NOMECLIENTE",textoPesquisa);...depoiscontinuacomosmétodosdojasperepassaoobjetompjuntoporparâmetroqueelevaipegarlánorelatórioeadicionarovalorquevcpassouemparam_nomeclienteevaicolocarnosqldorelatório}
murillo_smit
leopoldof:
da maneira como o joaoorso citou também é facil....
Caso sua listagem de objetos que puchou do banco para adicionar na tabela não exista mais,
faça um for na tabela mesmo pegando seus valores e criando uma nova listagem de objetos
usando o método getValueAt da jtable... assim vc geraria uma nova listagem sem fazer um novo select no banco e enviaria isso para seu relatório
Seg. opção:
Quando a nova query dentro do relatório...
1-Cria um novo parametro lá no seu relatório pelo netbeans ou ireport... não sei qual vc usa para gerar os relatórios Ex PARAM_NOMECLIENTE
2-cria lá no seu relatório a query sql de pesquisa Ex: SELECT NOME, ENDERCO, CIDADE, ESTADO FROM CLIENTE WHERE $P{PARAM_NOMECLIENTE}
3-No seu botão imprimir, antes de chamar o relatório vc cria um Map e passa como parametro a pesquisa que o usuário digitou senão envia 1=1...assim:
(lembrando que isso é só um exemplo)
//Seu método para impressãopublicvoidimprimir(){StringtextoPesquisa=txfPesquisaCliente.getText();if(textoPesquisa.isEmpty()){textoPesquisa=" 1= 1 ";}Mapmp=newHashMap();mp.put("PARAM_NOMECLIENTE",textoPesquisa);...depoiscontinuacomosmétodosdojasperepassaoobjetompjuntoporparâmetroqueelevaipegarlánorelatórioeadicionarovalorquevcpassouemparam_nomeclienteevaicolocarnosqldorelatório}
Como seria o parametro no Ireport?
quaresma
murillo_smit:
leopoldof:
da maneira como o joaoorso citou também é facil....
Caso sua listagem de objetos que puchou do banco para adicionar na tabela não exista mais,
faça um for na tabela mesmo pegando seus valores e criando uma nova listagem de objetos
usando o método getValueAt da jtable... assim vc geraria uma nova listagem sem fazer um novo select no banco e enviaria isso para seu relatório
Seg. opção:
Quando a nova query dentro do relatório...
1-Cria um novo parametro lá no seu relatório pelo netbeans ou ireport... não sei qual vc usa para gerar os relatórios Ex PARAM_NOMECLIENTE
2-cria lá no seu relatório a query sql de pesquisa Ex: SELECT NOME, ENDERCO, CIDADE, ESTADO FROM CLIENTE WHERE $P{PARAM_NOMECLIENTE}
3-No seu botão imprimir, antes de chamar o relatório vc cria um Map e passa como parametro a pesquisa que o usuário digitou senão envia 1=1...assim:
(lembrando que isso é só um exemplo)
//Seu método para impressãopublicvoidimprimir(){StringtextoPesquisa=txfPesquisaCliente.getText();if(textoPesquisa.isEmpty()){textoPesquisa=" 1= 1 ";}Mapmp=newHashMap();mp.put("PARAM_NOMECLIENTE",textoPesquisa);...depoiscontinuacomosmétodosdojasperepassaoobjetompjuntoporparâmetroqueelevaipegarlánorelatórioeadicionarovalorquevcpassouemparam_nomeclienteevaicolocarnosqldorelatório}
Como seria o parametro no Ireport?
boa pergunda :D
joaoorso
murillo_smit
RESOLVIDO
UTILIZEI O SEGUINTE.
CAPITUREI UMA INFORMAÇÃO EM CAMPO TEXTO, E PASSEI ELE COMO PARAMETRO ID_CLIENTE.
DEPOIS CRIEI O PARAMETRO NO IREPORT E DEU TUDO CERTO, SEGUE O CODIGO
// imprimir dados do cliente pesquisadointid=Integer.parseInt(jTextField2.getText());InputStreaminputStream=getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");// mapa de parâmetros do relatório Mapparametros=newHashMap();parametros.put("cliente",id);try{// abre o relatórioReportUtils.openReport("Clientes",inputStream,parametros,ConnectionFactory.getSakilaConnection());// Visualiza o relatório em formato PDF */// JasperViewer.viewReport("idCliente.pdf", false);}catch(SQLExceptionexc){exc.printStackTrace();}catch(JRExceptionexc){exc.printStackTrace();}
FLW GALERA!
L
leopoldof
Favor…poste no título do tópico como resolvido para que outras pessoas visualizem que aqui foi achado a solução do seu problema…
murillo_smit
murillo_smit:
[b]Bom dia galera!
to com uma duvida a dias, criei uma aplicação onde nela pode pesquisar um cliente até ai funcionou tudo certo, agora eu coloquei um botei para
imprimir somento oque os dados do cliente que foi pesquisar, ai q ta minha duvida, alguem tem alguma ideia de como posso fazer issu?
conseguiu fazer uns relatorios no ireport pelo netbeans, imprimir tudo blz, mais eu quero para imprimir somento oq foi pesquisar!
segue uma imagem da aplicação.
Agradeço a ajuda de todos![/b]
murillo_smit
Resolvido!
// imprimir dados do cliente pesquisadointid=Integer.parseInt(jTextField2.getText());InputStreaminputStream=getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");// mapa de parâmetros do relatório Mapparametros=newHashMap();parametros.put("cliente",id);try{// abre o relatórioReportUtils.openReport("Clientes",inputStream,parametros,ConnectionFactory.getSakilaConnection());// Visualiza o relatório em formato PDF */// JasperViewer.viewReport("idCliente.pdf", false);}catch(SQLExceptionexc){exc.printStackTrace();}catch(JRExceptionexc){exc.printStackTrace();}}privatevoidsaveButtonActionPerformed(java.awt.event.ActionEventevt){// imprimir dados do cliente pesquisadointid=Integer.parseInt(jTextField2.getText());InputStreaminputStream=getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");// mapa de parâmetros do relatório Mapparametros=newHashMap();parametros.put("cliente",id);try{// abre o relatórioReportUtils.openReport("Clientes",inputStream,parametros,ConnectionFactory.getSakilaConnection());// Visualiza o relatório em formato PDF */// JasperViewer.viewReport("idCliente.pdf", false);}catch(SQLExceptionexc){exc.printStackTrace();}catch(JRExceptionexc){exc.printStackTrace();}
// imprimir dados do cliente pesquisadointid=Integer.parseInt(jTextField2.getText());InputStreaminputStream=getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");// mapa de parâmetros do relatório Mapparametros=newHashMap();parametros.put("cliente",id);try{// abre o relatórioReportUtils.openReport("Clientes",inputStream,parametros,ConnectionFactory.getSakilaConnection());// Visualiza o relatório em formato PDF */// JasperViewer.viewReport("idCliente.pdf", false);}catch(SQLExceptionexc){exc.printStackTrace();}catch(JRExceptionexc){exc.printStackTrace();}}privatevoidsaveButtonActionPerformed(java.awt.event.ActionEventevt){// imprimir dados do cliente pesquisadointid=Integer.parseInt(jTextField2.getText());InputStreaminputStream=getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");// mapa de parâmetros do relatório Mapparametros=newHashMap();parametros.put("cliente",id);try{// abre o relatórioReportUtils.openReport("Clientes",inputStream,parametros,ConnectionFactory.getSakilaConnection());// Visualiza o relatório em formato PDF */// JasperViewer.viewReport("idCliente.pdf", false);}catch(SQLExceptionexc){exc.printStackTrace();}catch(JRExceptionexc){exc.printStackTrace();}