[英]Delphi Firedac master details multiple
如果這是VCL項目(而不是FireMonkey項目),則可以非常簡單地執行此操作。
將TDBCtrlGrid放在表單上,並為詳細數據集設置其DataSource
。
在IDE中,DBCtrlGrid將顯示一系列垂直面板,一個面板為純灰色,另一個面板為條紋。 將諸如TDBEdits之類的數據庫感知控件放在純灰色面板上,設置其DataField屬性,然后編譯並運行。 DBCtrlGrid具有一個Orientation
屬性,您可以根據自己的喜好將其設置為垂直或水平。
你應該看到,在運行時,該DBCtrlGrid與面板,它包含作為有詳細記錄,直到由DBCtrlGrid的指定數量的數據感知組件的多個實例填充RowCount
屬性。 如果你想確保有面板的足夠的副本,你可以嘗試設置的RowCount
值到RecordCount' of the detail dataset in the
主數據集的AfterScroll`事件。
另一方面,如果它是一個FireMonkey(FMX)項目,那么您需要使用LiveBindings(不包含TDBCtrlGrids),則可以通過與設置控件以顯示控件的字段類似的方式來執行此操作。掌握數據集,但我從未嘗試過。
以下最小的VCL項目代碼摘錄顯示了DBCtrlGrid的用法;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBClient,
dbcgrids, Mask;
type
TForm1 = class(TForm)
cdsMaster: TClientDataSet;
cdsDetail: TClientDataSet;
dsMaster: TDataSource;
dsDetail: TDataSource;
gMaster: TDBGrid;
dbnavMaster: TDBNavigator;
gDetail: TDBGrid;
dbnavDetail: TDBNavigator;
DBCtrlGrid1: TDBCtrlGrid;
DBEdit1: TDBEdit; // placed in DBCtrlGrid1
DBEdit2: TDBEdit; // placed in DBCtrlGrid1
procedure cdsMasterAfterScroll(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
private
public
end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
i,
j : Integer;
Field : TIntegerField;
begin
DBEdit1.DataField := 'MasterID';
DBEdit2.DataField := 'DetailID';
Field := TIntegerField.Create(Self);
Field.FieldName := 'MasterID';
Field.DataSet := cdsMaster;
cdsMaster.CreateDataSet;
Field := TIntegerField.Create(Self);
Field.FieldName := 'DetailID';
Field.DataSet := cdsDetail;
Field := TIntegerField.Create(Self);
Field.FieldName := 'MasterID';
Field.DataSet := cdsDetail;
cdsDetail.MasterSource := dsMaster;
cdsDetail.MasterFields := 'MasterID';
cdsDetail.IndexFieldNames := 'MasterID;DetailID';
cdsDetail.CreateDataSet;
for i := 1 to 10 do begin
cdsMaster.InsertRecord([i]);
for j := 1 to i do
cdsDetail.InsertRecord([j, i]);
end;
cdsMaster.First;
end;
procedure TForm1.cdsMasterAfterScroll(DataSet: TDataSet);
begin
cdsDetail.DisableControls;
try
DBCtrlGrid1.RowCount := cdsDetail.RecordCount;
finally
cdsDetail.EnableControls;
end;
end;
只需將TDBEdit放在窗體上,然后設置其Datafield屬性和詳細信息表的Datasource屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.