DBGrid Lookup Alan Sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DBGrid Lookup Alan Sorunu
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
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
Re: DBGrid Lookup Alan Sorunu
İ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.
Re: DBGrid Lookup Alan Sorunu
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...
Re: DBGrid Lookup Alan Sorunu
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.
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
Re: DBGrid Lookup Alan Sorunu
Çözüm bulamadım sanırım bu iş için illa x-dbgrid gibi bir component satın almak gerekiyor.
Re: DBGrid Lookup Alan Sorunu
DBGrid için column için PickList özelliği istediğini yapar. Bunu forumda örneklerini bulabilirsin. 

Re: DBGrid Lookup Alan Sorunu
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.
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.
Re: DBGrid Lookup Alan Sorunu
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.
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.
Re: DBGrid Lookup Alan Sorunu
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.
Re: DBGrid Lookup Alan Sorunu
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 :

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

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
Re: DBGrid Lookup Alan Sorunu
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.