DBGrid Lookup Alan Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

Merhabalar,
Soru çok basit gelecek ama forumda böyle bir konu bulamadığım için soruyorum. Form üzerinde verileri DBGrid te gösteriyorum gösterdiğim alanlardan bir tanesi lookup field özelliğine sahip grid üzerinde combobox gözüküyor fare ile seçim yapılabiliyor ancak seçimleri klavyeden veri girerek ve otomatik tamamlama özelliğini de kullanarak yapmak istiyorum. Nasıl yapabilirim?
Teşekkürler
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

İnternette araştırmadığım yer kalmadı ama maalesef hiçbir şey bulamadım. Böyle basit bir şeyi delphide yapamıyor olmamız çok garip. Accessin bile veri sayfalarında iki saniyelik bir işlem.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen brs »

Selam arkadaşım ben şahsen ne demek istediğinizi anlayamadım biraz daha konuyu açar mısınız ve uygulamış olduğunuz kodları veya projenin rar yaparak eklermisiniz
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

Merhabalar,
Göndermiş olduğum örnekte grid içerisinde KISILIK adlı kolon lookup alan olarak tanımlı bu alanda ki değerleri fare ile seçebiliyorum ancak fare değilde klavyeden değer girerek seçmek istiyorum. Mesela KISILIK kolonunda Tüzel ve Gerçek diye iki seçenek var kalavyeden Tü girince Tüzele tamamlasın istiyorum. Auto Complate gibi bir seçenek göremedim.
Dosya ekleri
Data.rar
Örnek uygulama
(13.48 KiB) 164 kere indirildi
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

Çözüm bulamadım sanırım bu iş için illa x-dbgrid gibi bir component satın almak gerekiyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen mrmarman »

DBGrid için column için PickList özelliği istediğini yapar. Bunu forumda örneklerini bulabilirsin. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

Merhabalar cevap için teşekkürler,
PickListi o şekilde nasıl kullanabilirim bilmiyorum KISILIK tablosundaki KISLIK_ID değerini KISI tablosunun KISLIK_ID değerine kaydedecek ancak picklistte "Gerçek" ve "Tüzel" diye iki değer gözükecek. Picklist ile yapılan örneklere bir bakayım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen mrmarman »

PickList pasif bir içerik yönetimidir. Pasif demekle şunu ifade etmeye çalışıyorum, DBLookUP gibi kayıtlar değiştikçe güdülenmez. Statik bir listedir.Eğer bu liste kayıtlara göre sürekli güncel kalması gerekecekse, tabloya bilgi girişi / silinmesi vb. durumlarda yeniden elle temizlenip girdilerin yenilenmesi gerekir.

Açılır liste kutusu kapalı iken serbest giriş yaparsınız.
Açılır liste kutusu açık ise dilerseniz mouse ile dilerseniz de klavyeden yazdığınız harfler ile güdümlenerek listedeki satıra konumlanır, ENTER basınca da ilgili seçili satır hücre kaydına kendiliğinden yerleşir.
Resim
Resim ....Resim
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

Picklist dediğiniz gibi pasif bir içerik yönetimi siz onu önerince bende araştırma yaptım ama picklist özelliğinde de otomatik tamamlama yapamıyorum ki zaten lookup alanla ilişkilendiremedim. Acaba DBCombobox kullansam autocomplate true olarak bunu DBgride eklemeye çalışsam olur mu bilmiyorum aklıma tek gelen yöntem bu.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen mrmarman »

Konu DBGrid üzerinde ise iki opsiyonun var.

(1) Bu başlıkta verdiğim örnek gibi bir ilüzyon yaratarak fiziksel bir DBComboBox kullanıp aktif olan hücre hangisi ise onun boyutlarında yapılandırıp DBGrid üzerinde göstermek.
(2) Otomatik düşünmeyip basit bir procedure yazıp PickList'i doldurmak.


(1) için örnek :

Resim

Kod: Tümünü seç

Var
  i : Integer;
begin
  ADOConnection1.LoginPrompt      := False;
  AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;'
  + 'Data Source='+ ExtractFilePath(Application.Exename) + 'Database.mdb';

  AdoQuery1.Connection := ADOConnection1;
  DataSource1.DataSet  := ADOQuery1;
  AdoQuery1.SQL.Text   := 'SELECT M_Name, M_Year, M_DirectedBy FROM Divxturk';
  AdoQuery1.Active     := True;
  DBGrid1.DataSource   := DataSource1;
  DBGrid1.Options      := DBGrid1.Options - [dgEditing];
  for i := 0 to DBGrid1.Columns.Count - 1 do if DBGrid1.Columns[i].Width > 150
    then DBGrid1.Columns[i].Width := 150;

  AdoQuery2.Connection := ADOConnection1;
  DataSource2.DataSet  := ADOQuery2;
  AdoQuery2.SQL.Text   := 'SELECT DISTINCT M_DirectedBy FROM Divxturk ORDER BY M_DirectedBy';
  AdoQuery2.Active     := True;

  DBLookupComboBox1.ListSource := DataSource2;
  DBLookupComboBox1.KeyField   := 'M_DirectedBy';

  DBLookupComboBox1.DataSource := DataSource1;
  DBLookupComboBox1.DataField  := 'M_DirectedBy';

Kod: Tümünü seç

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  // Onayla butonu için uygun column/field hangisisye oraya odaklanıcaz...
  if ( Field.FieldName ='M_DirectedBy' )
    then
  begin
    if ( Field.DataSet.RecordCount > 0 ) then begin
      // Onayla butonu yerleştir.
      If ( (gdSelected in State) or (gdFocused in State) )
      then begin
        DBLookupComboBox1.Height  := Rect.Bottom-Rect.Top   + 1;
        DBLookupComboBox1.Width   := Rect.Right - Rect.Left;
        DBLookupComboBox1.Left    := Rect.Left  + tDBGrid(Sender).Left + 2;
        DBLookupComboBox1.Top     := Rect.Top   + tDBGrid(Sender).Top  + 1;
        DBLookupComboBox1.Visible := True;
      end else begin
        DBLookupComboBox1.Visible := False;
      end;
    end else begin
      DBLookupComboBox1.Visible := False;
    end;
  end;
end;
Dosya ekleri
DBGrid_DBLookupCombo_Birlikte.rar
(Kaynak Kodlu Proje) DBGrid ile DBLookUpComboBox kombine kullanımı Örneği
(152.43 KiB) 159 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
kocivan
Üye
Mesajlar: 30
Kayıt: 29 Kas 2013 01:21

Re: DBGrid Lookup Alan Sorunu

Mesaj gönderen kocivan »

Sayın mrmarman örnek için teşekkür ederim. DBComboboxın iteminddex değerine tablodaki KISLIK_ID değerini atayıp KISILIK alanını Items değerine eklemeyi düşünüyorum KISLIK_ID alanını arka planda bırakıp hiç göstermeyeceğim tab ile alanlar arasında dolaşılırken direkt olarak DBComboboxa yönelecek DBComboboxtan arama yapılım kayıt bulununca itemindex değerini KISILIK_ID alanına kaydedeceğim. Tabi yapabilirsem.
Cevapla