動態建立
(其中的 School 字段是 Lookup 字段):
//先在窗體上放置: DBGrid1、DataSource1、ClientDataSet1、ClIEntDataSet2; 其他全用代碼實現:
procedure TForm1.FormCreate(Sender: TObject);
begin
{ 關聯控件 }
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClIEntDataSet1;
{ 把 ClIEntDataSet2 定義為一個 School 列表, 同時添加測試數據 }
with ClIEntDataSet2 do begin
FIEldDefs.Add('ID', ftInteger);
FIEldDefs.Add('Name', ftString, 20);
CreateDataSet;
AppendRecord([1, '哈佛大學']);
AppendRecord([2, '斯坦福大學']);
AppendRecord([3, '耶魯大學']);
AppendRecord([4, '加州理工學院']);
AppendRecord([5, '加州大學']);
AppendRecord([6, '劍橋大學']);
AppendRecord([7, '麻省理工學院']);
AppendRecord([8, '牛津大學']);
AppendRecord([9, '哥倫比亞大學']);
MergeChangeLog;
SaveToFile('C:\Temp\School.xml', dfXMLUTF8); { 保存下, 也給後面的例子用 }
end;
{ 下面是定義 ClIEntDataSet1; 先添加兩個普通字段 }
with TStringFIEld.Create(Self) do
begin
FIEldName := 'Student'; { 用於顯示學生名稱 }
Size := 12;
DataSet := ClIEntDataSet1;
end;
with TIntegerFIEld.Create(Self) do
begin
FieldName := 'School_ID'; { 用於和 ClIEntDataSet2 的 ID 字段關聯 }
DataSet := ClIEntDataSet1;
end;
{ 添加 Lookup 字段 }
{ 通過 School_ID 和 ClientDataSet2.ID 的關聯, 從 ClIEntDataSet2 中查找 Name 字段的值 }
with TStringFIEld.Create(Self) do
begin
FIEldName := 'School';
FieldKind := fkLookup; { 上兩個字段會默認 FIEldKind := fkData }
DataSet := ClIEntDataSet1;
KeyFIElds := 'School_ID';
LookupDataSet := ClIEntDataSet2;
LookupKeyFIElds := 'ID';
LookupResultFIEld := 'Name';
end;
ClIEntDataSet1.CreateDataSet;
end;
設計時添加 Lookup 字段(其中 ClIEntDataSet2 使用了上面剛保存的 School.XML):
查看原圖(大圖)