簡體   English   中英

Delphi Firedac master詳細信息多個

[英]Delphi Firedac master details multiple

我在2個tdbgrid中顯示了2個關系主表中的表。 現在,我想在Tedit控件中在表格詳細信息的行上顯示每個字段,但是現在我在第一組tedit中僅查看詳細信息的第一行。

在此處輸入圖片說明

如果這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM