Mostrar descrição do produto a medida que digita

Delphi

01/09/2006

Pessoal,

Tenho um grid de pedidos que possui os campos código e descrição do produto. Gostaria q ao digitar a descrição fosse aparecendo os produtos disponíveis e ao selecioná-lo, já preenchesse o código...como no lookupcombobox...pesquisei no fórum, mas não encontrei nada...
Alguém conhece algum componente ou sabe como se faz isso??

Grata,
Vânia


Vania

Vania

Curtidas 0

Respostas

Cpd_arim

Cpd_arim

01/09/2006

query1.close;
query1.sql.clear;
query1.sql.add(´select * from produtos´);
query1.SQL.Add(´Where descricao Like ´ + CHR(39) + ´¬´ + Edit1.Text + ´¬´ + CHR(39));
query1.open;

dbedit1.text := query1codigo.asstring;

qq dúvida cpd_arim@hotmail.com


GOSTEI 0
Vania

Vania

01/09/2006

mas eu queria dessa forma:

tenho 2 colunas no dbgrid: cod. e descr do prod....se eu for digitando a descrição...por ex. digito a letra C...ele abre uma lista (na coluna do grid mesmo, como se fosse o picklist) com todos os produtos com q letra C...se eu continuar digitando e digitoa a letra a...ele vai filtrando e mostra todos os produtos com Ca....e assim por diante...se eu selecionar um dos produtos dessa lista...


GOSTEI 0
Cpd_arim

Cpd_arim

01/09/2006

é exatamente o que fiz.


GOSTEI 0
Daniel_mc

Daniel_mc

01/09/2006

Va no evento OnChange do componente onde será digitado, vamos usar um edit por exemplo:

e faça conforme o colega [b:63abd32b99]cpd_arim[/b:63abd32b99] informou. Mas isto supondo que esteja usando query´s, se o DBGrid estiver linkado a query1, o que vc esta querendo irá acontecer


GOSTEI 0
Vania

Vania

01/09/2006

mas eu não queria q o resultado da query ficasse no DBGrid...e sim q abrisse uma lista na coluna descrição do produto no DBGrid (como se fosse uma picklist)...Por ex...eu tenho lá um grid de pedidos, onde vou cadastrando os produtos, quantidades, valor, etc q eu quero inserir nos pedidos....

oq q eu quero é q qnd eu estiver na coluna da descrição do produto NO DBGrid do pedido e ao começar a digitar, ele abrisse uma lista com os produtos pra selecionar.... eu não usaria nenhum outro componente (edit, etc...)...e as colunas do DBGrid não possuem o evento OnChange...Não sei se consegui ser mais clara agora...


GOSTEI 0
Marco Salles

Marco Salles

01/09/2006

oq q eu quero é q qnd eu estiver na coluna da descrição do produto NO DBGrid do pedido e ao começar a digitar, ele abrisse uma lista com os produtos pra selecionar.... eu não usaria nenhum outro componente (edit, etc...)...e as colunas do DBGrid não possuem o evento OnChange...Não sei se consegui ser mais clara agora...


acho que voce pode fazer isto <salvo tenha isto em algum componente pronto> desenhando um combobox na celula da grid

exemplo:

var
texto:string


procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
combobox1.Visible := (dbgrid1.SelectedField = CmpoDoSeuDataSet);
 if combobox1.Visible Then
  if gdfocused in state then
   begin
    combobox1.SetFocus;
    combobox1.SetBounds(rect.Left+19,
                        rect.Top+17,
                        rect.Right - Rect.Left,
                        rect.Bottom - Rect.Top);
    end;
end;


os items desse combobox deverão ser alimentados com uma query

if combobox1.Text = ´´ then
begin
texto:=Texto+Key;
query1.close;
query1.sql.clear;
query1.sql.add(´select Descricao_Produto from produtos´);
query1.SQL.Add(´Where Upper(descricao_produto) Like :Descricao´);
query1.ParamByName(´Descricao´).AsString:=AnsiUpperCase(texto)+´¬´;
query1.Prepare;
query1.open;
combobox1.Clear;
Query1.First;
while not query1.Eof do
 begin
   combobox1.Items.Add(Query1Descricao_Produto.AsString);
   Query1.Next;
 end;
ComboBox1.DroppedDown := True;
end;
end;


procedure TForm1.SeuDataSetBeforeScroll(DataSet: TDataSet);
begin
combobox1.Clear;
end;


procedure TForm1.SeuDataSetAfterScroll(DataSet: TDataSet);
begin
 combobox1.Items.Add(cds1Nome_Cliente.AsString);
 combobox1.ItemIndex:=0;
end;


procedure TForm1.ComboBox1Click(Sender: TObject);
begin
SeuDataSet.Edit;
SeuDataSetCampo.AsString:=combobox1.Items.Strings[combobox1.ItemIndex];
end;


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if combobox1.Text = ´´ Then
 texto:=´´;
end;


[b:8565494531]Voce pode usar essa idéia e obter resultados melhores...[/b:8565494531]

quero deixar claro que é so uma idéia...


GOSTEI 0
POSTAR