结构如下:
cxGird1
  cxGridLevel1-cxGridTableView1 主表
    cxGridLevel1-cxGridTableView1 从表插入主表的操作没有问题,子表该怎么插入数据并作关联呢。强调一下,没有数据源,是一张脱离DB的动态分析表格。数据库主从表只需要指定一下key就可以,没数据库的表就搞不定了。。主表插入数据代码如下:
var
  RecordNumber:Integer;
  st:TStringList
begin
  st := TStringlist.Create;//车间人员
  st.add('张三');
  st.add('李四')
  recordNumber := cxGridTableView1.DataController.AppendRecord;
  cxGridTableView1.DataController.Values[RecordNumber,0]{车间名称} := edtPlant.Text;
  for i := 0 to st.count -1 do begin
//    插入子表
  end;
  st.free;
end;
随便写了一段代码,请大家参考帮我解决下!

解决方案 »

  1.   

    结构如下: 
    cxGird1 
      cxGridLevel1-cxGridTableView1 主表 
        cxGridLevel2-cxGridTableView2 从表 
    太不要意思粗心了,结构应该是这样。。
    动态插入cxGridTableView2数据,与cxGridTableView1对应主从关系
      

  2.   

    没研究过主从表,不过好像demo里有,找个demo看看吧
      

  3.   

    Demo里都是通过数据库的Key解决的,脱离数据库的表格操作,Demo里好像没啊
      

  4.   

    贴段示例代码, 可解决你这个问题。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit,
      cxGridCustomTableView, cxGridTableView, cxClasses, cxControls,
      cxGridCustomView, cxGridLevel, cxGrid, cxDataStorage;const
      CM_GETGRIDVIEW = WM_USER + 1;type
      TForm1 = class(TForm)
        cxGrid1Level1: TcxGridLevel;
        cxGrid1: TcxGrid;
        cxGrid1Level2: TcxGridLevel;
        cxGrid1TableView1: TcxGridTableView;
        cxGrid1TableView1Column1: TcxGridColumn;
        cxGrid1TableView1Column2: TcxGridColumn;
        cxGrid1TableView1Column3: TcxGridColumn;
        cxGrid1TableView2: TcxGridTableView;
        cxGrid1TableView2Column1: TcxGridColumn;
        cxGrid1TableView2Column2: TcxGridColumn;
        procedure FormCreate(Sender: TObject);
        procedure cxGrid1Level2GetGridView(Sender: TcxGridLevel;
          AMasterRecord: TcxCustomGridRecord;
          var AGridView: TcxCustomGridView);
      private
        procedure CmGetGridView(var Msg: TMessage); message CM_GETGRIDVIEW;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    {$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      I: Integer;
    begin
      with cxGrid1TableView1 do
      begin
        for I := 0 to DataController.ItemCount - 1 do
          Items[I].DataBinding.ValueTypeClass := TcxStringValueType;
        DataController.RecordCount := 2;
        DataController.Values[0, 0] := 'Value 0';
        DataController.Values[0, 1] := 'Value 0 Column 1';
        DataController.Values[0, 2] := 'Value 0 Column 2';
        DataController.Values[1, 0] := 'Value 1';
        DataController.Values[1, 1] := 'Value 1 Column 1';
        DataController.Values[1, 2] := 'Value 1 Column 2';
      end;  with cxGrid1TableView2 do
        for I := 0 to DataController.ItemCount - 1 do
          Items[I].DataBinding.ValueTypeClass := TcxStringValueType;
    end;procedure TForm1.cxGrid1Level2GetGridView(Sender: TcxGridLevel;
      AMasterRecord: TcxCustomGridRecord; var AGridView: TcxCustomGridView);
    begin
      PostMessage(handle, CM_GETGRIDVIEW, Integer(AMasterREcord), Integer(AGridView));
    end;procedure TForm1.CmGetGridView(var Msg: TMessage);
    var
      I, J: Integer;
      AMasterRecord: TcxCustomGridRecord;
      AGridView: TcxGridTableView;
      AClone: TcxCustomGridView;
    begin
      if not ((TObject(Msg.WParam) is TcxCustomGridRecord) and (TObject(Msg.LParam) is TcxGridTableView)) then
        Exit;
      AMasterRecord := TcxCustomGridRecord(Msg.WParam);
      AGridView := TcxGridTableView(Msg.LParam);
      AClone := AGridView.Clones[AGridView.CloneCount - 1];
      AClone.BeginUpdate;
      try
        with AClone.DataController do
        begin
          RecordCount := (AMasterRecord.Index + 1) * 5;
          for I := 0 to RecordCount - 1 do
            for J := 0 to AGridView.ColumnCount - 1 do
              if  J = 0 then
                Values[I, J] := 'Value ' + IntToStr(AMasterRecord.Index)
              else
                Values[I, J] := Format('Value %d Record %d Column %d', [AMasterRecord.Index, I, J])
        end
      finally
        AClone.EndUpdate;
      end;
    end;end.