Mostrar um filtro na dbgrid com cores diferentes?

Delphi

07/12/2006

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
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

Adriano_servitec

Curtidas 0

Respostas

Adriano_servitec

Adriano_servitec

07/12/2006

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)
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;
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


GOSTEI 0
Adriano_servitec

Adriano_servitec

07/12/2006

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
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;
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


GOSTEI 0
POSTAR