[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]
Carregue uma lista do que foi pesquisado e envie como data Source para seu Jasper.
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
SELECT NOME, ENDERECO, ETC FROM CLIENTE WHERE @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
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?
Como seria esse isso? carregar uma lista do que foi pesquisado e enviar pro jasper como data source:?:
[quote=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
SELECT NOME, ENDERECO, ETC FROM CLIENTE WHERE @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
[/quote]
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?
[quote=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?[/quote]
Qual IDE vc ta usando? se for o netbeans e bem simples! posta aki que eu te ajudo!
A idéia é criar uma lista de objetos
Person p1 = new Person(new Long(1), "Patrick", "Lightbuddie");
Person p2 = new Person(new Long(2), "Jason", "Carrora");
Person p3 = new Person(new Long(3), "Alexandru", "Papesco");
Person p4 = new Person(new Long(4), "Jay", "Boss");
// Store people in our dataSource list (normally would come from database).
myList = new ArrayList<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)
Olha … esse exemplo aqui :
http://struts.apache.org/2.0.11.2/docs/jasperreports-tutorial.html
usando Struts .
Mas vc pode pesquisar outras maneiras de enviar. Independente do Struts.
O exemplo vai servir para melhorar seu entendimento.
Abraço .
[quote=joaoorso]A idéia é criar uma lista de objetos
Person p1 = new Person(new Long(1), "Patrick", "Lightbuddie");
Person p2 = new Person(new Long(2), "Jason", "Carrora");
Person p3 = new Person(new Long(3), "Alexandru", "Papesco");
Person p4 = new Person(new Long(4), "Jay", "Boss");
// Store people in our dataSource list (normally would come from database).
myList = new ArrayList<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)
Olha … esse exemplo aqui :
http://struts.apache.org/2.0.11.2/docs/jasperreports-tutorial.html
usando Struts .
Mas vc pode pesquisar outras maneiras de enviar. Independente do Struts.
O exemplo vai servir para melhorar seu entendimento.
Abraço . [/quote]
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?
É 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 !
[quote=murillo_smit][quote=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?[/quote]
Qual IDE vc ta usando? se for o netbeans e bem simples! posta aki que eu te ajudo![/quote]
bah seria muito bom vc me da uma ajuda tirei um print da minha telaa
http://www.baixa.la/arquivo/5692083
uso o netbens ja fiz todo relatorio tah prontinho só falta puxa
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ão
public void imprimir(){
String textoPesquisa = txfPesquisaCliente.getText();
if(textoPesquisa.isEmpty()){
textoPesquisa = " 1= 1 ";
}
Map mp = new HashMap();
mp.put("PARAM_NOMECLIENTE", textoPesquisa);
... depois continua com os métodos do jasper e passa o objeto mp junto por parâmetro que ele vai pegar lá no
relatório e adicionar o valor que vc passou em param_ nomecliente e vai colocar no sql do relatório
}
[quote=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)
[code]
//Seu método para impressão
public void imprimir(){
String textoPesquisa = txfPesquisaCliente.getText();
if(textoPesquisa.isEmpty()){
textoPesquisa = " 1= 1 ";
}
Map mp = new HashMap();
mp.put("PARAM_NOMECLIENTE", textoPesquisa);
… depois continua com os métodos do jasper e passa o objeto mp junto por parâmetro que ele vai pegar lá no
relatório e adicionar o valor que vc passou em param_ nomecliente e vai colocar no sql do relatório
}
[/code][/quote]
Como seria o parametro no Ireport?
[quote=murillo_smit][quote=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)
[code]
//Seu método para impressão
public void imprimir(){
String textoPesquisa = txfPesquisaCliente.getText();
if(textoPesquisa.isEmpty()){
textoPesquisa = " 1= 1 ";
}
Map mp = new HashMap();
mp.put("PARAM_NOMECLIENTE", textoPesquisa);
… depois continua com os métodos do jasper e passa o objeto mp junto por parâmetro que ele vai pegar lá no
relatório e adicionar o valor que vc passou em param_ nomecliente e vai colocar no sql do relatório
}
[/code][/quote]
Como seria o parametro no Ireport?[/quote]
boa pergunda 
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
[code]// imprimir dados do cliente pesquisado
int id = Integer.parseInt(jTextField2.getText());
InputStream inputStream = getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");
// mapa de parâmetros do relatório
Map parametros = new HashMap();
parametros.put("cliente", id);
try {
// abre o relatório
ReportUtils.openReport("Clientes", inputStream, parametros,
ConnectionFactory.getSakilaConnection());
// Visualiza o relatório em formato PDF */
// JasperViewer.viewReport("idCliente.pdf", false);
} catch (SQLException exc) {
exc.printStackTrace();
} catch (JRException exc) {
exc.printStackTrace();
}
[/code]
FLW GALERA!
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…
[quote=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][/quote]
Resolvido!
[code] // imprimir dados do cliente pesquisado
int id = Integer.parseInt(jTextField2.getText());
InputStream inputStream = getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");
// mapa de parâmetros do relatório
Map parametros = new HashMap();
parametros.put("cliente", id);
try {
// abre o relatório
ReportUtils.openReport("Clientes", inputStream, parametros,
ConnectionFactory.getSakilaConnection());
// Visualiza o relatório em formato PDF */
// JasperViewer.viewReport("idCliente.pdf", false);
} catch (SQLException exc) {
exc.printStackTrace();
} catch (JRException exc) {
exc.printStackTrace();
}
}
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {
// imprimir dados do cliente pesquisado
int id = Integer.parseInt(jTextField2.getText());
InputStream inputStream = getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");
// mapa de parâmetros do relatório
Map parametros = new HashMap();
parametros.put("cliente", id);
try {
// abre o relatório
ReportUtils.openReport("Clientes", inputStream, parametros,
ConnectionFactory.getSakilaConnection());
// Visualiza o relatório em formato PDF */
// JasperViewer.viewReport("idCliente.pdf", false);
} catch (SQLException exc) {
exc.printStackTrace();
} catch (JRException exc) {
exc.printStackTrace();
}
[/code]
Resolvido!
[code] // imprimir dados do cliente pesquisado
int id = Integer.parseInt(jTextField2.getText());
InputStream inputStream = getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");
// mapa de parâmetros do relatório
Map parametros = new HashMap();
parametros.put("cliente", id);
try {
// abre o relatório
ReportUtils.openReport("Clientes", inputStream, parametros,
ConnectionFactory.getSakilaConnection());
// Visualiza o relatório em formato PDF */
// JasperViewer.viewReport("idCliente.pdf", false);
} catch (SQLException exc) {
exc.printStackTrace();
} catch (JRException exc) {
exc.printStackTrace();
}
}
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {
// imprimir dados do cliente pesquisado
int id = Integer.parseInt(jTextField2.getText());
InputStream inputStream = getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");
// mapa de parâmetros do relatório
Map parametros = new HashMap();
parametros.put("cliente", id);
try {
// abre o relatório
ReportUtils.openReport("Clientes", inputStream, parametros,
ConnectionFactory.getSakilaConnection());
// Visualiza o relatório em formato PDF */
// JasperViewer.viewReport("idCliente.pdf", false);
} catch (SQLException exc) {
exc.printStackTrace();
} catch (JRException exc) {
exc.printStackTrace();
}
[/code]