2017-02-02 4 views
0

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

enter image description here

+0

Да, проект VCL. Затем я должен написать запрос для каждой строки? –

+0

Затем я должен написать запрос для каждой строки? yes is VCL –

+0

«Я должен написать запрос для каждой строки?» если вы используете TDBCtrlGrid, как в моем ответе, нет необходимости. – MartynA

ответ

2

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

  • Поместите TDBCtrlGrid на вашей форме и установите ее DataSource для детализации данных.

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

Вы должны видеть, что во время выполнения, то DBCtrlGrid заселяет с таким количеством экземпляров панели и БД-зависимых компонентов, содержащихся в нем, как есть детальные записи, до числа, указанного RowCount имущества DBCtrlGrid в , Если вы хотите убедиться, что имеется достаточно копий панели, вы можете попробовать установить значение RowCount в событие RecordCount' of the detail dataset in the AfterScroll` основного набора данных.

С другой стороны, если это (FMX) проект FireMonkey, так что вы должны использовать 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

мое подключение к базе данных с Firedac извините –

+0

FireDAC не должен иметь никакого значения, в проектах VCL он поддерживает все поддерживаемые db-компоненты Delphi, включая TDBCtrlGrid. – MartynA

+0

, но я не вижу их одновременно, где я не прав? –

0

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

+0

Если вы посмотрите на скриншот OP, это выглядит так, как его главная таблица - таблица пациентов, а детали - таблица их рецептов, и он, похоже, уже подключен к таблице подробностей TBEdits. – MartynA

+0

, но линии запускаются только в первой группе Tedit. Мне хотелось бы увидеть все строки во всех современных Тодитах. Он не работает даже с tdctrlgrid. Есть что-то, что ускользает от меня –

+0

https://www.youtube.com/edit?o=U&video_id=y_us6WeHVoQ –

Смежные вопросы