Saya harap saya mengerti apa yang Anda minta, mengingat struktur tabel yang ditampilkan di tangkapan layar Anda.
Kode di bawah ini menunjukkan cara menyiapkan DBLookUPComboBox untuk menampilkan kota yang akan dipilih untuk orang tertentu dalam tabel orang. Saya telah menggunakan TClientDataSets sehingga mandiri dan sehingga seluruh pengaturan dilakukan dalam kode daripada dengan pengaturan properti di Object Inspector.
Jelas, DBGrid dan dbNavigator terhubung ke sumber data dsPerson.
Kode
TForm1 = class(TForm)
cdsCity: TClientDataSet;
cdsPerson: TClientDataSet;
dsPerson: TDataSource;
DBGrid1: TDBGrid;
DBLookupComboBox1: TDBLookupComboBox;
dsCity: TDataSource;
DBNavigator1: TDBNavigator;
procedure FormCreate(Sender: TObject);
end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
Field : TField;
begin
Field := TIntegerField.Create(Self);
Field.FieldName := 'CityId';
Field.DataSet := cdsCity;
Field := TStringField.Create(Self);
Field.FieldName := 'City';
Field.Size := 40;
Field.DataSet := cdsCity;
cdsCity.CreateDataSet;
cdsCity.InsertRecord([3, 'Moscow']);
cdsCity.InsertRecord([4, 'Leningrad']);
Field := TIntegerField.Create(Self);
Field.FieldName := 'PersonId';
Field.DataSet := cdsPerson;
Field := TIntegerField.Create(Self);
Field.FieldName := 'CityID';
Field.DataSet := cdsPerson;
Field := TStringField.Create(Self);
Field.FieldName := 'Name';
Field.Size := 40;
Field.DataSet := cdsPerson;
cdsPerson.CreateDataSet;
cdsPerson.InsertRecord([1, 4, 'Ivan']);
cdsPerson.InsertRecord([2, 3, 'Kate']);
DBLookupComboBox1.DataField := 'CityID';
DBLookupComboBox1.DataSource := dsPerson;
DBLookupComboBox1.KeyField := 'CityID';
DBLookupComboBox1.ListField := 'City';
DBLookupComboBox1.ListSource := dsCity;
end;
Perhatikan bahwa alih-alih (atau juga) menggunakan DBLookUpComboBox, Anda juga dapat menentukan bidang pencarian di kumpulan data cdsPerson, dengan menambahkan kode di bawah ini sebelum panggilan ke cdsPerson.CreateDataSet. Jika Anda melakukannya, cdsPerson akan memiliki kolom tambahan, CityName,. Ini akan ditampilkan di DBGrid - Anda mungkin perlu menggulirnya ke kanan untuk melihatnya - dan jika Anda mengklik salah satu sel CityName, Anda akan melihat bahwa itu mengaktifkan daftar drop-down di tempat dari mana sebuah kota dapat dipilih, seperti itu
Saat Anda memilih Nama Kota yang berbeda, ID Kota di catatan Orang akan diperbarui secara otomatis.
Field := TStringField.Create(Self);
Field.FieldName := 'CityName';
Field.Size := 40;
Field.DataSet := cdsPerson;
Field.FieldKind := fklookUp;
Field.LookUpDataSet := cdsCity;
Field.LookUpKeyFields := 'CityID';
Field.LookupResultField := 'CityName';
Field.KeyFields := 'CityID';
Jika saya telah memahami komentar Anda dengan benar, coba ini:
-
tambahkan DBGrid dan DBNavigator kedua dan DBEdit ke formulir.
-
setel semua sumber datanya ke dsCity dan setel DataField DBEdit ke CityName.
Anda kemudian dapat menambahkan Kota baru ke tabel Kota dan menentukan ID Kota (dalam kisi) dan Nama Kota (dalam kisi atau DBEdit). Perhatikan bahwa segera setelah Anda menyimpannya menggunakan DBNavigator kedua, Anda kemudian dapat mengklik sel CityName dari grid Person dan CityName baru akan berada di daftar drop-down. Jika Anda ingin melakukan pengeditan ini pada rekaman saat ini dari tabel Person, Anda dapat melakukannya dengan menambahkan event handler AfterPost pada tabel City dan menambahkan kode seperti ini:
procedure TForm1.cdsCityAfterPost(DataSet : TDataSet);
begin
cdsPerson.Edit;
try
cdsPerson.FieldByName('CityId').AsInteger := DataSet.FieldByName('CityId').AsInteger;
finally
cdsPerson.Post;
end;
end;