dbgridde exceldeki gibi listeden al olayı

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

dbgridde exceldeki gibi listeden al olayı

Mesaj gönderen AliRiza »

Arkadaşlar belki sizlere lazım olur düşüncesiyle aşağıdaki kodları forma ekliyorum.
Öncelikle formun create'inde

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin

      SetupGridPickList('mfadi', 'SELECT distinct mfadi FROM data');

  end;


Daha sonra bir procedure yazıyoruz..

Kod: Tümünü seç

 type
  TForm1 = class(TForm)
procedure SetupGridPickList(
        const FieldName : string;
        const sql : string);
Procedure'i ilgili bölümde belirttikten sonra CTRL+Shift+C yaparsanız otomatik olarak procedure bloğu oluşacaktır..

Kod: Tümünü seç

procedure TForm1.SetupGridPickList(const FieldName, sql: string);
var
  slPickList:TStringList;
  Query : TADOQuery;
  i : integer;
begin
  slPickList:=TStringList.Create;
  Query := TADOQuery.Create(self);
  try
    Query.Connection := ADOConnection1;
    Query.SQL.Text := sql;
    Query.Open;
    //Fill the string list
    while not Query.EOF do
    begin
      slPickList.Add(Query.Fields[0].AsString);
      Query.Next;
    end; //while

        for i:=0 to DBGrid1.Columns.Count-1 do
      if DBGrid1.Columns[i].FieldName = FieldName then
      begin
        DBGrid1.Columns[i].PickList:=slPickList;
        Break;
      end;
  finally
    slPickList.Free;
    Query.Free;
  end;
end; 
En son ilgili alana tıkladığınızda listenin açılması için dbgrid'in cellclik olayına aşağıdaki kodu yazın..

Kod: Tümünü seç

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
   if Column.PickList.Count > 0 then
  begin
    keybd_event(VK_F2,0,0,0);
    keybd_event(VK_F2,0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_MENU,0,0,0);
    keybd_event(VK_DOWN,0,0,0);
    keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
  end;
end;
Umarım tüm arkadaşlarıma yararı olur.
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
Cevapla