结构如下:
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;
随便写了一段代码,请大家参考帮我解决下!
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;
随便写了一段代码,请大家参考帮我解决下!
cxGird1
cxGridLevel1-cxGridTableView1 主表
cxGridLevel2-cxGridTableView2 从表
太不要意思粗心了,结构应该是这样。。
动态插入cxGridTableView2数据,与cxGridTableView1对应主从关系
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.