起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 347|回复: 11

【结】如何自动按条件把模版数据带到编写页面?**

[复制链接]
发表于 2008-3-21 10:42:49 | 显示全部楼层 |阅读模式
要求:当输入一条主数据集数据时,与之对应的模版中的数据自动能够填充,代码如下(这些代码是在业务信息中),但是过滤条件代码应如何写?(即输入的主数据集和模版中的主键相同时,其所对应的信息,自动填充)
procedure TCHEANALYZEINFO.GetCheAnaSta1Data; //取计划书模版
begin
  DataSetMXB.Open; //打开检修目标明细表
  DataSetCheAnaSta1.Open; //打开检修目标模版
  if not DataSetMXB.IsEmpty then exit;
  DataSetMXB.DisableControls;
  DataSetCheAnaSta1.DisableControls;
  DataSetMXB.First; //跳到检修目标明细表的第一条数据
  DataSetCheAnaSta1.First; //跳到检修目标模版的第一条数据
  while not DataSetCheAnaSta1.Eof do
  begin
    DataSetMXB.Append;
    DataSetMXB.FieldByName('SerialNo').Assign(DataSetCheAnaSta1.FieldByName('SerialNo'));
    DataSetMXB.FieldByName('EquName').Assign(DataSetCheAnaSta1.FieldByName('EquName'));
    DataSetMXB.FieldByName('GuiName').Assign(DataSetCheAnaSta1.FieldByName('GuiName'));
    DataSetMXB.FieldByName('RatNum').Assign(DataSetCheAnaSta1.FieldByName('RatNum'));

    DataSetMXB.Post;
    DataSetCheAnaSta1.Next;
  end;
  try
    DataSetMXB.First;
  finally
    DataSetMXB.EnableControls;
   DataSetCheAnaSta1.EnableControls;
  end;
end;
回复

使用道具 举报

发表于 2008-3-22 11:17:23 | 显示全部楼层
可以用Filter或者SqlFilter来根据主表过滤你的模板表,如:
SqlFilter := '字段1 = XXX';
SqlFiltered := true;

或者:
直接把模板表设置成主数据集的从表,利用主从关系来自动完成过滤
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 15:07:27 | 显示全部楼层
我用的第二种方法.见代码.但是运行时从表数据无法自动填充.请帮我看看代码!!!急!
unit CheAnalyzeRepInfo;

interface

uses
  Business.System, Business.Model, Business.Data, Business.Forms;

type
  TCheAnalyzeRepInfo = class(TInfo)
    DataSetCheAnalyzeRepMaster: TSQLDataSet;
    DataSetCheAnalyzeRepDetail: TSQLDataSet;
    DataSetModel: TSQLDataSet;
    DataSetCheAnalyzeStaTable: TSQLDataSet;
    procedure DataSetCheAnalyzeRepMasterAfterOpen(DataSet: TDataSet);
    private
    FIsStart : Boolean;
  public
    property IsStart : Boolean read FIsStart write FIsStart;
    procedure GetPlanTempletData; //取计划书模版
  procedure AutoFillDetailData(Sender: TDataField); //项目字段变化自动填充从表
  end;

implementation

procedure TCheAnalyzeRepInfo.AutoFillDetailData(Sender: TDataField); //项目字段变化自动填充从表
begin
  if IsStart then
  begin
    GetPlanTempletData;
  end;
end;

procedure TCheAnalyzeRepInfo.GetPlanTempletData; //取计划书模版
begin
  DataSetCheAnalyzeRepDetail.Open;
  DataSetModel.Open;
  DataSetCheAnalyzeRepDetail.DisableControls;
  DataSetModel.DisableControls;
  DataSetCheAnalyzeRepDetail.First;
  DataSetModel.First;
  if  not DataSetCheAnalyzeRepDetail.IsEmpty then
  begin
    while not DataSetCheAnalyzeRepDetail.Eof do
    begin
      DataSetCheAnalyzeRepDetail.Delete;
    end;
  end;
  while not DataSetModel.Eof do
  begin
    DataSetCheAnalyzeRepDetail.Append;
    DataSetCheAnalyzeRepDetail.FieldByName('StaName').Assign(DataSetModel.FieldByName('StaName'));
    DataSetCheAnalyzeRepDetail.FieldByName('StaValue').Assign(DataSetModel.FieldByName('StaValue'));
    DataSetCheAnalyzeRepDetail.Post;
    DataSetModel.Next;
  end;
  try
    DataSetCheAnalyzeRepDetail.First;
  finally
    DataSetCheAnalyzeRepDetail.EnableControls;
    DataSetModel.EnableControls;
  end;
end;


procedure TCheAnalyzeRepInfo.DataSetCheAnalyzeRepMasterAfterOpen(DataSet: TDataSet);
begin
  DataSet.FieldByName('KKS').OnChange := AutoFillDetailData;
end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 15:30:03 | 显示全部楼层
有没有高手可以看看.
根据主表"KKS"字段变化自动填充从数据集
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 16:32:08 | 显示全部楼层
是否必须在业务功能加上ON SHOW 和ON CREAT事件,代码才能作用/
回复 支持 反对

使用道具 举报

发表于 2008-3-25 17:15:03 | 显示全部楼层
这样的东东设置断点跟踪一下就知道了,一个是时机不对

对了,你的数据集是设置的自动打开吧,如果是请把afteropen事件上的东东写到业务信息下的相应的数据集AfterOpen上,可以把整理逻辑都写到信息层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 22:21:31 | 显示全部楼层
OK.搞定.但是如果我要同时打开两个从数据集,请问需要如何修改?
回复 支持 反对

使用道具 举报

发表于 2008-3-26 08:30:38 | 显示全部楼层
“但是如果我要同时打开两个从数据集”这句话没有看懂,这跟上面的代码有啥关系,需要在哪个数据集上处理,直接在数据集的相应事件上写就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-26 08:55:36 | 显示全部楼层

我现在的代码意思是"当主数据集某字段变化时,自动填充从数据集",实际上,我要实现的完整功能是,"当主数据集某字段变化时,自动填充三个从数据集".但是我试了一下,没有实现,请教应该在代码的什么位置进行修改?
回复 支持 反对

使用道具 举报

发表于 2008-3-26 10:16:43 | 显示全部楼层
那就在主数据集的OnFieldChange 实现你要的逻辑就可以了,参考代码
http://bbs.justep.com/forum.php?mod=viewthread&tid=1946
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 17:56 , Processed in 0.037396 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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