起步软件技术论坛-X3

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

【结贴】[问题]自定义数据集动态创建列显示问题**

[复制链接]
发表于 2008-4-8 11:38:36 | 显示全部楼层 |阅读模式
根据选定日期查询,我选定开始时间是1月到3月的,第一次查询显示如下:

1.jpg

14.83 KB, 下载次数: 238

回复

使用道具 举报

 楼主| 发表于 2008-4-8 11:42:21 | 显示全部楼层
当我把开始时间改为2月的时候,显示结果如下:
请问,怎么会多出来一列呢,怎么把这列‘’给去掉?
因为正确的显示就该只显示到结束时间3月份。

2.jpg

13.58 KB, 下载次数: 232

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-8 11:50:25 | 显示全部楼层
up
回复 支持 反对

使用道具 举报

发表于 2008-4-8 13:34:18 | 显示全部楼层
你用的是啥数据集,是透视数据集吗?
如果是列的显示名称你做修改了吗?
你是怎么修改这个范围的?是直接修改SQL的text吗?帖出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-8 14:23:59 | 显示全部楼层
我用的是自定义数据集
var
   lBizField:TBizField;
   i,k,j:integer;
   yf_ks,yf_js,nf_ks,nf_js,tj,rzrq,tj_gs:integer;//开始月份,结束月份,开始年份,结束年份,统计,入职日期
   lContextCurrent: TContextCurrent;
   tjr,tjrq:string;
   yg_yf,yg_nf:integer;//员工月份,员工年份

if tj>0 then
     begin
          for i:=0 to tj-1 do
          begin
               lBizField := TUserDataField.Create(DataSetZDYSJJ1);
               lBizField.DataSet := DataSetZDYSJJ1;
               lBizField.ID := sysUtils.IntToStr;                            //设置字段ID
               lBizField.DataType := TDataType.dtString;          //设置字段类型
               lBizField.Size := 32;
               if i+yf_ks>12 then
               begin
                    lBizField.DisplayName :=sysUtils.IntToStr(nf_js)+'_'+sysUtils.IntToStr(i+yf_ks-12)+'月';
               end
               else
               begin
                    lBizField.DisplayName :=sysUtils.IntToStr(nf_ks)+'_'+sysUtils.IntToStr(i+yf_ks)+'月';
               end;
         //  datasetzdysjj1.Next;
         end;
         DataSource1.DataSet.Close;
         DataSetBZSJJ.Close;
         datasetzdysjj1.Close;
         datasetzdysjj1.Open;
         datasetzdysjj1.First;
         datasetzdysjj1.Edit;
         DataSetBZSJJ.Open;
         DataSetZDYSJJ1.Fields[0].AsString:=lContextCurrent.Operator.DisplayName;
         DataSetZDYSJJ1.Fields[1].AsString:=Sysutils.DateToStr(Sysutils.now);
         for k:=0 to datasetbzsjj.RecordCount-1 do
         begin
              yg_yf:=dateUtils.MonthOf(DataSetBZSJJ.FieldByName['RZRQ'].AsDateTime);
              yg_nf:=dateUtils.YearOf(DataSetBZSJJ.FieldByName['RZRQ'].AsDateTime);

              for i:=2 to tj+2-1 do
              begin
                   if i-2+yf_ks>12 then
                   begin
                        if (yg_yf=i-2+yf_ks-12) and (yg_nf=nf_js) then
                        begin
                             str[i-2]:=str[i-2]+1;

                        end;
                   end
                   else
                   begin
                        if (yg_yf=i-2+yf_ks) and (yg_nf=nf_ks) then
                        begin
                             str[i-2]:=str[i-2]+1;
                        end;
                   end;
                 end;
                   //dialogs.ShowMessage('dd');
                   DataSetBZSJJ.Next;
         end;
         for i:=2 to tj+2-1 do
         begin
             datasetzdysjj1.Fields[0].AsString:=tjr;
             datasetzdysjj1.Fields[1].AsString:=tjrq;
             datasetzdysjj1.Fields.AsString:=sYsutils.IntToStr(str[i-2])
         end;
     //datasetzdysjj1.Close;
     end
     else
     begin
          dialogs.ShowMessage('月份不能操过12个月!');
     end;

end;
回复 支持 反对

使用道具 举报

发表于 2008-4-8 14:41:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-8 14:59:36 | 显示全部楼层
http://bbs.justep.com/forum.php?mod=viewthread&tid=22206
我就说参考这个来做的,可是我是要对列头进行删除,清空数据集只是内容,第二次查询的时候,把查询时间放短,之前第一次查询时生成的列都存在,结果见我帖的第二幅图。
回复 支持 反对

使用道具 举报

发表于 2008-4-8 15:13:08 | 显示全部楼层
for j := 0 to TUserDataSet(DataSetZDYSJJ).UserFieldCount-1 do
     begin
         TUserDataSet(DataSetZDYSJJ).UserFields[0].Free;
     end;
没看到楼主写
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-8 15:24:28 | 显示全部楼层
不好意思,是我没有粘贴完全
完整代码如下:
procedure TCT.BitBtn1Click(Sender: TObject);
var
   lBizField:TBizField;
   i,k,j:integer;
   yf_ks,yf_js,nf_ks,nf_js,tj,rzrq,tj_gs:integer;//开始月份,结束月份,开始年份,结束年份,统计,入职日期
   lContextCurrent: TContextCurrent;
   tjr,tjrq:string;
   yg_yf,yg_nf:integer;//员工月份,员工年份
begin
     lContextCurrent := Business.Model.TContextCurrent.Create(self.Context);
     tjr:=lContextCurrent.Operator.DisplayName;
     tjrq:= Sysutils.DateToStr(Sysutils.now);
     yf_ks:=dateUtils.MonthOf(DateTimePicker1.DateTime);
     yf_js:=dateUtils.MonthOf(DateTimePicker2.DateTime);
     nf_ks:=dateUtils.YearOf(DateTimePicker1.DateTime);
     nf_js:=dateUtils.YearOf(DateTimePicker2.DateTime);
     tj:=0;
     if nf_ks=nf_js then //同年
     begin
          if yf_ks<yf_js then
          begin
               tj:=yf_js-yf_ks+1;
          end;
     end;
     if nf_ks<nf_js then //不同年
     begin
          if nf_js-nf_ks=1 then
          begin
               tj:=12-yf_ks+yf_js+1;
                if tj>12 then
                begin
                     tj:=0
                end;
          end;
     end;
     setlength(str,tj);
      for j:=0 to str.Length-1 do
       begin
         str[j]:=0;
       end;
     for j := 0 to TUserDataSet(DataSetZDYSJJ1).UserFieldCount-1 do
       begin
         TUserDataSet(DataSetZDYSJJ1).UserFields[0].Free;
       end;


           lBizField := TUserDataField.Create(DataSetZDYSJJ1);
           lBizField.DataSet := DataSetZDYSJJ1;
           lBizField.ID := 'tjr';                            //设置字段ID
           lBizField.DataType := TDataType.dtString;          //设置字段类型
           lBizField.Size := 32;
           lBizField.DisplayName :='统计人 ';

           lBizField := TUserDataField.Create(DataSetZDYSJJ1);
           lBizField.DataSet := DataSetZDYSJJ1;
           lBizField.ID := 'tjrq';                            //设置字段ID
           lBizField.DataType := TDataType.dtString;          //设置字段类型
           lBizField.Size := 32;
           lBizField.DisplayName :='统计日期 ';
     if tj>0 then
     begin
          for i:=0 to tj-1 do
          begin
               lBizField := TUserDataField.Create(DataSetZDYSJJ1);
               lBizField.DataSet := DataSetZDYSJJ1;
               lBizField.ID := sysUtils.IntToStr;                            //设置字段ID
               lBizField.DataType := TDataType.dtString;          //设置字段类型
               lBizField.Size := 32;
               if i+yf_ks>12 then
               begin
                    lBizField.DisplayName :=sysUtils.IntToStr(nf_js)+'_'+sysUtils.IntToStr(i+yf_ks-12)+'月';
               end
               else
               begin
                    lBizField.DisplayName :=sysUtils.IntToStr(nf_ks)+'_'+sysUtils.IntToStr(i+yf_ks)+'月';
               end;
         //  datasetzdysjj1.Next;
         end;
         DataSource1.DataSet.Close;
         DataSetBZSJJ.Close;
         datasetzdysjj1.Close;
         datasetzdysjj1.Open;
         datasetzdysjj1.First;
         datasetzdysjj1.Edit;

         DataSetBZSJJ.Open;
         DataSetZDYSJJ1.Fields[0].AsString:=lContextCurrent.Operator.DisplayName;
         DataSetZDYSJJ1.Fields[1].AsString:=Sysutils.DateToStr(Sysutils.now);
         for k:=0 to datasetbzsjj.RecordCount-1 do
         begin
              yg_yf:=dateUtils.MonthOf(DataSetBZSJJ.FieldByName['RZRQ'].AsDateTime);
              yg_nf:=dateUtils.YearOf(DataSetBZSJJ.FieldByName['RZRQ'].AsDateTime);

              for i:=2 to tj+2-1 do
              begin
                   if i-2+yf_ks>12 then
                   begin
                        if (yg_yf=i-2+yf_ks-12) and (yg_nf=nf_js) then
                        begin
                             str[i-2]:=str[i-2]+1;

                        end;
                   end
                   else
                   begin
                        if (yg_yf=i-2+yf_ks) and (yg_nf=nf_ks) then
                        begin
                             str[i-2]:=str[i-2]+1;
                        end;
                   end;
                 end;
                   //dialogs.ShowMessage('dd');
                   DataSetBZSJJ.Next;
         end;
         for i:=2 to tj+2-1 do
         begin
             datasetzdysjj1.Fields[0].AsString:=tjr;
             datasetzdysjj1.Fields[1].AsString:=tjrq;
             datasetzdysjj1.Fields.AsString:=sYsutils.IntToStr(str[i-2])
         end;
     //datasetzdysjj1.Close;
     end
     else
     begin
          dialogs.ShowMessage('月份不能操过12个月!');
     end;

end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-8 18:34:46 | 显示全部楼层
up
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 20:08 , Processed in 0.045067 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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