Fórum Mostrar um filtro na dbgrid com cores diferentes? #334394
07/12/2006
0
Pessoal boa tarde, eu gostaria de saber se tem como ficar num dbgrid um filtro um pouco diferente tipo assim:
tenho um edit para gerar o filtro em SQL e um DBGrid que recebe o filtro, entao vamos supor que tenho dois clientes com a ID diferentes no dbgrid assim:
[b:b8f7583e60]100------Pedro da Silva
101------Manoel da Esquina
100------Pedro da Silva[/b:b8f7583e60]
Bom essa tabela fica com o campo ID do cliente repetida pois eh uma tabela filho, quando faço o filtro no evento onexit do edit se no caso digitar o ID 100 fica assim no grid
[b:b8f7583e60]100------Pedro da Silva
100------Pedro da Silva[/b:b8f7583e60]
O que eu gostaria eh de saber se em vez de eliminar o cliente [b:b8f7583e60][u:b8f7583e60]Manoel da Esquina[/u:b8f7583e60][/b:b8f7583e60] mostrar assim na grid
[b:b8f7583e60]100------Pedro da Silva[/b:b8f7583e60]
[color=green:b8f7583e60]101------Manoel da Esquina[/color:b8f7583e60]
[b:b8f7583e60]100------Pedro da Silva[/b:b8f7583e60]
Ou seja se nao satisfazer a condiçao do where do SQL ficar em outra cor ou mesmo com o enabled=false. Nao sei se tem jeito.
Bom pessoal se nao entenderam me avisem.
Nao sei se vai precisar mostrar o codigo que eu uso para fazer o filtro no onexit do edit, mais tai como eu faço
[color=red:b8f7583e60]Obs: Nao quero um show de cores pode ser somente uma, desde que seja somente para os clientes que nao pertencem a ID que ei fizer o filtro[/color:b8f7583e60]
Agradeço a todos
No aguardo
Adriano
tenho um edit para gerar o filtro em SQL e um DBGrid que recebe o filtro, entao vamos supor que tenho dois clientes com a ID diferentes no dbgrid assim:
[b:b8f7583e60]100------Pedro da Silva
101------Manoel da Esquina
100------Pedro da Silva[/b:b8f7583e60]
Bom essa tabela fica com o campo ID do cliente repetida pois eh uma tabela filho, quando faço o filtro no evento onexit do edit se no caso digitar o ID 100 fica assim no grid
[b:b8f7583e60]100------Pedro da Silva
100------Pedro da Silva[/b:b8f7583e60]
O que eu gostaria eh de saber se em vez de eliminar o cliente [b:b8f7583e60][u:b8f7583e60]Manoel da Esquina[/u:b8f7583e60][/b:b8f7583e60] mostrar assim na grid
[b:b8f7583e60]100------Pedro da Silva[/b:b8f7583e60]
[color=green:b8f7583e60]101------Manoel da Esquina[/color:b8f7583e60]
[b:b8f7583e60]100------Pedro da Silva[/b:b8f7583e60]
Ou seja se nao satisfazer a condiçao do where do SQL ficar em outra cor ou mesmo com o enabled=false. Nao sei se tem jeito.
Bom pessoal se nao entenderam me avisem.
Nao sei se vai precisar mostrar o codigo que eu uso para fazer o filtro no onexit do edit, mais tai como eu faço
procedure TForm6.Edit1Exit(Sender: TObject);
begin
dm.ibq1.close; //essa DataSet pertence ao SQL Pai(Mestre)
dm.ibq1.sql.text := ´select * from sind2 where matricula = :pmatricula order by matricula´;
dm.ibq1.ParamByName(´pMatricula´).AsString := Edit1.Text;
dm.ibq1.Open;
if NOT dm.ibq1.isEmpty then
begin
LABEL3.CAPTION:=DM.ibq1.FieldByName(´associado´).AsString;
{*****SQL montada para mostrar dados da Tabela Filho (Detalhe)****}
with dm.QryLimpa do //essa SQL eh que vai mostrar os dados no grid
begin
close;
sql.clear;
sql.text := ´select * from corrente WHERE matricula = :pmatricula order by sequencia´;
parambyname(´pmatricula´).asString := edit1.text;
open;
end;
end
else
begin
messagedlg(´Código do associado não Localizado´,mterror,[mbOk],0);
dm.ibq1.close;
dm.QryLimpa.close;
if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then
begin
edit1.text:=´´;
edit1.setfocus;
end
else
edit5.setfocus;
end;
end;[color=red:b8f7583e60]Obs: Nao quero um show de cores pode ser somente uma, desde que seja somente para os clientes que nao pertencem a ID que ei fizer o filtro[/color:b8f7583e60]
Agradeço a todos
No aguardo
Adriano
Adriano_servitec
Curtir tópico
+ 0
Responder
Posts
07/12/2006
Adriano_servitec
Como nao tenho como editar meu post resolvi parte do problema assim
Fiz esse codigo no evento onDrawDataCell do DBGrid (Tirado do Help do Delphi)
Esta funcionando 100¬, o segredo foi eu colocar no onexit do edit para fechar e abrir novamente a tabela.
[b:64d1242b8a][color=blue:64d1242b8a]Apesar que ainda insisto em querer que fique no lugar de uma cor ficar com o enabled=false sobre esses dados que nao satisfaça a condiçao do filtro.[/color:64d1242b8a][/b:64d1242b8a]
Outra duvida, me parece que neste codigo acima se eu usar preencher o [b:64d1242b8a]Editing DBGrid Columns[/b:64d1242b8a] Aquele que abrimos ao dar dois cliques do mouse dentro do DBGrid para carregarmos os campos que desejamos que apareça no DBGrid, [b:64d1242b8a]Me pareçe que nao funciona[/b:64d1242b8a] Alguma soluçao para tal problema? Pois nao pretendo colocar todos os campos dentro da Grid.
Agradeço a todos
No aguardo
Adriano
Fiz esse codigo no evento onDrawDataCell do DBGrid (Tirado do Help do Delphi)
procedure TForm9.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin if dm.IBQCORR.FieldByName(´matricula´).AsString <> Edit1.Text then DBGrid2.Canvas.Font.Color := clGreen; DBGrid2.DefaultDrawDataCell(Rect, Field, State); end;
[b:64d1242b8a][color=blue:64d1242b8a]Apesar que ainda insisto em querer que fique no lugar de uma cor ficar com o enabled=false sobre esses dados que nao satisfaça a condiçao do filtro.[/color:64d1242b8a][/b:64d1242b8a]
Outra duvida, me parece que neste codigo acima se eu usar preencher o [b:64d1242b8a]Editing DBGrid Columns[/b:64d1242b8a] Aquele que abrimos ao dar dois cliques do mouse dentro do DBGrid para carregarmos os campos que desejamos que apareça no DBGrid, [b:64d1242b8a]Me pareçe que nao funciona[/b:64d1242b8a] Alguma soluçao para tal problema? Pois nao pretendo colocar todos os campos dentro da Grid.
Agradeço a todos
No aguardo
Adriano
Responder
Gostei + 0
11/12/2006
Adriano_servitec
Reformulando a pergunta:
Tenho um treeview que carrega os nomes da empresa, ai quando eu der um clique em anguma empresa preciso que:
No componente TreeView as outras empresas ficarem com o enabled=false?
Tipo tenho no treeview assim e se selecionar o adriano o resto ficar com o enabled false
[color=red:2cf1dd6691]Lista do treeview[/color:2cf1dd6691]
[b:2cf1dd6691][+]adriano[/b:2cf1dd6691]
[color=silver:2cf1dd6691][+]pedro
[+]maria
[+]jose
[+]carlos
[+]vanda[/color:2cf1dd6691]
E tambem ao selecionar uma empresa tenho uma tabela filho que tem que ser filtrado cfe.a empresa que eu selecionar, tentei assim, mais nao esta funcionando perfeito
Acho que o erro esta por que eu nao cosegui selecionar logo no primeiro clique no treeview todos os campos
Entao a pergunta como posso em vez de ter que dar um clique em cada subnode somente no primeiro node ja fazer o filtro, observem que tive que usar parametros que filtram por labels para mostrar na grade do form.
grato a ajuda de todos
Adriano
Tenho um treeview que carrega os nomes da empresa, ai quando eu der um clique em anguma empresa preciso que:
No componente TreeView as outras empresas ficarem com o enabled=false?
Tipo tenho no treeview assim e se selecionar o adriano o resto ficar com o enabled false
[color=red:2cf1dd6691]Lista do treeview[/color:2cf1dd6691]
[b:2cf1dd6691][+]adriano[/b:2cf1dd6691]
[color=silver:2cf1dd6691][+]pedro
[+]maria
[+]jose
[+]carlos
[+]vanda[/color:2cf1dd6691]
E tambem ao selecionar uma empresa tenho uma tabela filho que tem que ser filtrado cfe.a empresa que eu selecionar, tentei assim, mais nao esta funcionando perfeito
procedure TForm4.TreeView1Click(Sender: TObject);
begin
if (TreeView1.Selected.Level = 0) then
Label19.Caption:=TreeView1.Selected.Text;
if (TreeView1.Selected.Level = 1) then
Label20.Caption:=TreeView1.Selected.Text;
if (TreeView1.Selected.Level = 2) then
Label21.Caption:=TreeView1.Selected.Text;
with dm.Qsaida do
begin
SQL.clear;
dm.qsaida.Close;
sql.add(´ Select * from saidas ´);
sql.add(´ where cnpjempresa =:p_cnpjempresa and ano =:p_ano order by sequencia desc ´);
parambyname(´p_cnpjempresa´).asstring:=label20.caption;
parambyname(´p_Ano´).AsString:=label21.Caption;
open;
end;
{}
end;Acho que o erro esta por que eu nao cosegui selecionar logo no primeiro clique no treeview todos os campos
if (TreeView1.Selected.Level = 0) then Label19.Caption:=TreeView1.Selected.Text; if (TreeView1.Selected.Level = 1) then Label20.Caption:=TreeView1.Selected.Text; if (TreeView1.Selected.Level = 2) then Label21.Caption:=TreeView1.Selected.Text;
grato a ajuda de todos
Adriano
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)