Основная информация о Delphi Firedac

У меня есть 2 таблицы в отношении master-details, отображаемых в 2 tdbgrid. Теперь я хотел бы отобразить каждое поле в строках данных таблицы в элементе управления Tedit, но теперь я просматриваю только первую строку детали в моей первой группе tedit.

введите описание изображения здесь

delphi,firedac,

0

Ответов: 2


2

Если это проект VCL (а не FireMonkey), вы можете сделать это очень просто.

  • Поместите TDBCtrlGrid в свою форму и установите его DataSourceдля набора данных детали.

  • В IDE DBCtrlGrid отобразит вертикальную серию панелей, один цветной сплошной серый, а другие - полосатые. Поместите элементы управления db, такие как TDBEdits на сплошной серой панели, установите их свойства DataField, затем выполните компиляцию и запуск. DBCtrlGrid имеет Orientationсвойство, которое вы можете установить на вертикальное или горизонтальное, в соответствии с вашими предпочтениями.

Вы должны увидеть, что во время выполнения DBCtrlGrid заполняет столько экземпляров панели и компонентов, поддерживающих db, что и содержит подробные записи, вплоть до номера, указанного RowCountсвойством DBCtrlGrid . Если вы хотите убедиться, что имеется достаточное количество копий панели, вы можете попробовать установить 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;

0

Просто поместите TDBEdit в форму, а затем установите его свойство Datafield и свойство Datasource таблицы подробностей.

Дельфы, firedac,
Похожие вопросы