起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 221|回复: 7

【结贴】[请求动态的增加表格文档单元格**

[复制链接]
发表于 2008-1-29 17:07:17 | 显示全部楼层 |阅读模式
由于从数据集中需要显示的数据比较多,故采用了编码添加表格文档单元格来显示从数据集的数据。现在的问题是,从数据集中有三条子项目纪录,但显示出来的三条子项目纪录都是相同的,请问这种问题如何解决?谢谢!如图所示:
procedure TMainForm.AddSubProject(SubProjectDS:TDataSet;SubProjectName:string);
var
  lSheetDoc : TSheetDoc;
  lSheet: TDataSheet;
  lExporter: TSheetExporter;
  lArea: TDataSheetArea;
  lCell: TSheetCell;
  I,J, lCnt: Integer;
begin
     lSheetDoc := TSheetDoc(DocViewXMJBXX_XMJBXXBGWD.Doc);
     lSheet := TDataSheet(lSheetDoc.Sheet);

     lCnt := CurrentRow;
     J := lCnt;

     lSheet.Insert(1,lCnt-1,TSheetOperate.soAllRow,10,2);
     lSheet.CellTypes[1,lCnt-1] := TCellType.ctCell;
     lCell := lSheet.Cells[1,lCnt-1];
     lCell.AsString := '子项目'+SubProjectName;
     Inc(lCnt);

     lSheet.Insert(1,lCnt-1,TSheetOperate.soAllRow,10,2);

     lSheet.CellTypes[1,lCnt] := TCellType.ctCell;
     lCell := lSheet.Cells[1,lCnt];
     lCell.AsString := '项目名称';
     lCell.Sides := [TCellSide.sLeft,TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];
     lSheet.CellTypes[2,lCnt] := TCellType.ctField;
     lCell := lSheet.Cells[2,lCnt];
     TFieldCell(lCell).DataSetID := TSQLDataSet(SubProjectDS).ID;
     TFieldCell(lCell).FieldName := SubProjectDS.FieldByName('ProjectName').FieldName;
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];

     lSheet.CellTypes[7,lCnt] := TCellType.ctCell;
     lCell := lSheet.Cells[7,lCnt];
     lCell.AsString := '客户名称';
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop,TCellSide.sRight,TCellSide.sBottom];
     lSheet.CellTypes[8,lCnt] := TCellType.ctField;
     lCell := lSheet.Cells[8,lCnt];
     TFieldCell(lCell).DataSetID := TSQLDataSet(SubProjectDS).ID;
     TFieldCell(lCell).FieldName := SubProjectDS.FieldByName('CustomerName').FieldName;
     lCell.Sides := [TCellSide.sLeft,TCellSide.sTop, TCellSide.sRight,TCellSide.sBottom];

     Inc(lCnt);
     Inc(lCnt);

     lSheet.Insert(1,lCnt-1,TSheetOperate.soAllRow,10,2);
     lSheet.CellTypes[1,lCnt] := TCellType.ctCell;
     lCell := lSheet.Cells[1,lCnt];
     lCell.AsString := '合同编号';
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];
     lSheet.CellTypes[2,lCnt] := TCellType.ctField;
     lCell := lSheet.Cells[2,lCnt];
     TFieldCell(lCell).DataSetID := TSQLDataSet(SubProjectDS).ID;
     TFieldCell(lCell).FieldName := SubProjectDS.FieldByName('ContractNo').FieldName;
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];

     lSheet.CellTypes[7,lCnt] := TCellType.ctCell;
     lCell := lSheet.Cells[7,lCnt];
     lCell.AsString := '合同金额';
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];
     lSheet.CellTypes[8,lCnt] := TCellType.ctField;
     lCell := lSheet.Cells[8,lCnt];
     TFieldCell(lCell).DataSetID := TSQLDataSet(SubProjectDS).ID;
     TFieldCell(lCell).FieldName := SubProjectDS.FieldByName('ContractAmount').FieldName;
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];

     Inc(lCnt);
     Inc(lCnt);

     lSheet.Insert(1,lCnt-1,TSheetOperate.soAllRow,10,2);
     lSheet.CellTypes[1,lCnt] := TCellType.ctCell;
     lCell := lSheet.Cells[1,lCnt];
     lCell.AsString := '合同签订时间';
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];
     lSheet.CellTypes[2,lCnt] := TCellType.ctField;
     lCell := lSheet.Cells[2,lCnt];
     TFieldCell(lCell).DataSetID := TSQLDataSet(SubProjectDS).ID;
     TFieldCell(lCell).FieldName := SubProjectDS.FieldByName('ContractSignDate').FieldName;
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];

     lSheet.CellTypes[7,lCnt] := TCellType.ctCell;
     lCell := lSheet.Cells[7,lCnt];
     lCell.AsString := '合同结束时间';
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];
     lSheet.CellTypes[8,lCnt] := TCellType.ctField;
     lCell := lSheet.Cells[8,lCnt];
     TFieldCell(lCell).DataSetID := TSQLDataSet(SubProjectDS).ID;
     TFieldCell(lCell).FieldName := SubProjectDS.FieldByName('ContractEndDate').FieldName;
     lCell.Sides := [TCellSide.sLeft, TCellSide.sTop, TCellSide.sRight, TCellSide.sBottom];

     lArea := lSheet.Areas.Add(TAreaType.atDBArea) as TDataSheetArea;
     lArea.DataSetID := TSQLDataSet(SubProjectDS).ID;
     lArea.BoundsRect := Types.Bounds(J,1,lCnt,9);
     lArea.EditorRepeatMode := TEditorRepeatMode.ermAutoGrow;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
    // lSheetDoc.Close;
    // DocViewXMJBXX_XMJBXXBGWD.OpenView(TDocMode.dmEdit);
end;

procedure TMainForm.BizFormCreate(Sender: TObject);
begin
     CurrentRow := TDataSheet(TSheetDoc(DocViewXMJBXX_XMJBXXBGWD.Doc).Sheet).AvailableRow;
end;

procedure TMainForm.BizFormShow(Sender: TObject);
var
   I:Integer;
begin
     if SubProjectDataSet.Active = false then
        SubProjectDataSet.Active := true;

     SubProjectDataSet.First;
     while not SubProjectDataSet.Eof do
     begin
         I := I + 1;
         SubProjectDataSet.Edit;
         AddSubProject(SubProjectDataSet,sysUtils.IntToStr(I));
         SubProjectDataSet.Next;
     end;

     FreshDoc;
end;

procedure TMainForm.FreshDoc;
var
  lSheetDoc : TSheetDoc;
  lSheet: TDataSheet;
  lArea: TDataSheetArea;
begin
     lSheetDoc := TSheetDoc(DocViewXMJBXX_XMJBXXBGWD.Doc);
     lSheet := TDataSheet(lSheetDoc.Sheet);

     lSheetDoc.Close;
     DocViewXMJBXX_XMJBXXBGWD.OpenView(TDocMode.dmEdit);
end;

未命名.jpg

93.84 KB, 下载次数: 136

回复

使用道具 举报

发表于 2008-1-29 17:22:17 | 显示全部楼层
把主从关系去了试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-30 09:45:07 | 显示全部楼层
去掉了也不行,我把程序打包,你帮我看看吧,谢谢!

xsgl.rar

763.85 KB, 下载次数: 40

回复 支持 反对

使用道具 举报

发表于 2008-1-30 10:26:40 | 显示全部楼层
(路过)由于从数据集中需要显示的数据比较多,故采用了编码添加表格文档单元格来显示从数据集的数据。
1、感觉这句话的前因和后果没有理解,如果不采用代码添加表格文档单元格是啥样子的?
2、1楼的图就是你要实现的样子吗?哪个区域数主数据集?哪个区域是从数据集?有几个从数据集?
感觉这个图直接画就可以了,不用代码来生成。
回复 支持 反对

使用道具 举报

发表于 2008-1-30 10:47:21 | 显示全部楼层
你一楼表格完全可以通过表格文档直接表现,只需简单配置,表格文档是完全支持的。没有必要写代码去自己生成。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-30 15:59:13 | 显示全部楼层
之所以要这么大费周折,是为了解决下面的这个问题:
http://bbs.justep.com/forum.php?mod=viewthread&tid=21059
回复 支持 反对

使用道具 举报

发表于 2008-1-31 13:24:55 | 显示全部楼层
在那个帖子继续跟了。这个帖子的方法太复杂,建议回避。
回复 支持 反对

使用道具 举报

发表于 2008-1-31 16:11:13 | 显示全部楼层
这个贴结了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-6 13:02 , Processed in 0.038266 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表