在qrdbtext的onprint事件里判断就可以了

解决方案 »

  1.   

    在qrdbtext的onprint事件里判断就可以了在这个事件了判断只是打印的时候起作用,有没有一个事件可以在预览的时候能够判断该字段的数据是否为空,如果为空,不显示呢
      

  2.   

    这个QuickRep1NeedData我看了,但是不知道在什么时候能够触发这个事件
      

  3.   

    我想你用的是竖向排列各字段的内容吧,如果是这样的话,即使你不显示beizhu字段的内容,它对应的qbdbtext还是会站用哪个位置的。
    除非你在query的afterscroll事件中判断beizhu是否为空,然后再动态创建qrdbtext控件,否则在设计期放好的控件还是会存在和占用位置的
      

  4.   

    我的QRLABLE和QRDBTEXT都是动态生成的。现在我不知道如何控制它,才能让为空的记录不显示
    下面是我写的程序:
    procedure Tfrm_gzt.preview;
    var i,v_count:integer;
        v_name:string;
        v_code:string;
    const lable='qrlable';
          text='qrdbtext';
    begin
       v_sql_str:=v_sql_str+',A16,A34,A35';
       qry_gzt.close;
       qry_gzt.SQL.text:='select b.xm,a.gzh,'+v_sql_str+' from '+v_tablename+' a,'+v_zhigongname+' b'
       +' where a.bh=b.bh order by a.bh';
       qry_gzt.Open;   qry_auto.Close;
       qry_auto.SQL.Text:='select code,name from gzxxwh_zdb where code<>''BH'''
       +' and code<>''A34'' and code<>''A16'' and code<>''A35'' and riqi='''+v_tablename+'''';
     
       qry_auto.Open;   v_count:=qry_auto.RecordCount;
       for i:=0 to qry_gzt.FieldCount-1 do
       begin
          qry_auto.Close;
          qry_auto.SQL.text:='select code,name from gzxxwh_zdb '
          +' where code='''+qry_gzt.Fields[i].FieldName+'''';
          qry_auto.Open;
          v_name:=qry_auto.fieldbyname('name').asstring;
          v_code:=qry_auto.fieldbyname('code').asstring;
          if (v_code='A16') or (v_code='A34') or (v_code='A35') then
             continue;
          if v_name='' then
            continue;
          tQRLabel.Create(self).name:=lable+inttostr(i);
          with (tqrlabel(findcomponent(lable+inttostr(i)))) do
          begin
              left:=v_width*i;
              top:=10;
              parent:=DetailBand1;
              caption:=v_name;
              alignment:=tacenter;
              width:=v_width;
              if (i>=v_column) and (i<v_column*2) then
              begin
                 left:=v_width*(i-v_column);
                 top:=50;
                 parent:=DetailBand1;
                 caption:=v_name;
                 alignment:=tacenter;
              end;
              if (i>=v_column*2)  then
              begin
                  left:=v_width*(i-v_column*2);
                  top:=90;
                  parent:=DetailBand1;
                  caption:=v_name;
                  alignment:=tacenter;
              end;
          end;
          tqrdbtext.create(self).Name:=text+inttostr(i);
          with (tqrdbtext(findcomponent(text+inttostr(i)))) do
          begin
             left:=v_width*i;
              top:=30;
              parent:=DetailBand1;
              caption:=v_name;
              dataset:=qry_gzt;
              datafield:=v_code;
              alignment:=taRightJustify;
              width:=v_width;
              mask:='0.00';          if (i>=v_column) and (i<v_column*2) then
              begin
                 left:=v_width*(i-v_column);
                 top:=70;
                 parent:=DetailBand1;
                 caption:=v_code;          end;
              if i>=v_column*2 then
              begin
                  left:=v_width*(i-v_column*2);
                  top:=110;
                  parent:=DetailBand1;
                  caption:=v_code;          end;
          end;
          qry_gzt.Next;
       end;
       tQRLabel.Create(self).name:=lable+inttostr(qry_gzt.fieldcount+1);
       with (tqrlabel(findcomponent(lable+inttostr(qry_gzt.fieldcount+1)))) do
       begin
           left:=0;
           top:=10;
           parent:=DetailBand1;
           caption:='姓名';
           alignment:=tacenter;
       end;
       tqrdbtext.create(self).Name:=text+inttostr(qry_gzt.fieldcount+1);
       with (tqrdbtext(findcomponent(text+inttostr(qry_gzt.fieldcount+1)))) do
       begin
           left:=0;
           top:=30;
           parent:=DetailBand1;
           dataset:=qry_gzt;
           datafield:='xm';
           alignment:=tacenter;
       end;
     //打印说明项 
      v_count:=v_count+6;
       tQRLabel.Create(self).name:=lable+inttostr(v_count+2);
       with (tqrlabel(findcomponent(lable+inttostr(v_count+2)))) do
       begin
           left:=0;
       if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin       top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)+10;
        end
        else
        begin
            top:=40*((qry_gzt.fieldcount-3)div(v_column))+10;
        end;
           parent:=DetailBand1;
           caption:='补资';
           //alignment:=tacenter;
           width:=30;
           visible:=false;
       end;
       tqrdbtext.create(self).Name:=text+inttostr(v_count+2);
       with (tqrdbtext(findcomponent(text+inttostr(v_count+2)))) do
       begin
           left:=40;
           if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin       top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)+10;
        end
        else
        begin
            top:=40*((qry_gzt.fieldcount-3)div(v_column))+10;
        end;
           parent:=DetailBand1;
           dataset:=qry_gzt;
           datafield:='A16';
           width:=40*16;
           onprint:=textprint;
          alignment:=taLeftJustify;
       end;
       tQRLabel.Create(self).name:=lable+inttostr(v_count+3);
       with (tqrlabel(findcomponent(lable+inttostr(v_count+3)))) do
       begin
           left:=0;
              if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin       top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-10;
        end
        else
        begin
           top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)-10;
        end;       width:=30;
           parent:=DetailBand1;
           caption:='扣款';
           onprint:=textprint;
           alignment:=taLeftJustify;
       end;
       tQRDBText.create(self).Name:=text+inttostr(v_count+3);
       with (tQRDBText(findcomponent(text+inttostr(v_count+3)))) do
       begin
           left:=30;
            if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin       top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-10;
        end
        else
        begin
           top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)-10;
        end;
           width:=40*16;
           parent:=DetailBand1;
           dataset:=qry_gzt;
           datafield:='A35';
           alignment:=taLeftJustify;
           left:=40;
           onprint:=textprint;
       end;
       tQRLabel.Create(self).name:=lable+inttostr(v_count+4);
       with (tqrlabel(findcomponent(lable+inttostr(v_count+4)))) do
       begin
           left:=0;
              if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin       top:=40*((qry_gzt.fieldcount-3)div(v_column)+3)-30;
        end
        else
        begin
           top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-30;
        end;
           width:=30;
           parent:=DetailBand1;
           caption:='房租项';
           //alignment:=tacenter;
       end;
       tQRDBRichText.create(self).Name:=text+inttostr(v_count+4);
       with (tQRDBRichText(findcomponent(text+inttostr(v_count+4)))) do
       begin
           left:=30;
              if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin       top:=40*((qry_gzt.fieldcount-3)div(v_column)+3)-30;
        end
        else
        begin
           top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-30;
        end;
           left:=40;
           parent:=DetailBand1;
           width:=40*16;
           dataset:=qry_gzt;
           datafield:='A34';
           alignment:=taLeftJustify;
       end;//   DetailBand1.Height:=60*((qry_gzt.fieldcount)div(v_column)+1)-20*(qry_gzt.fieldcount)div(v_column)+90;  if  v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
        begin        DetailBand1.Height:=40*((qry_gzt.fieldcount-3)div(v_column)+1)+90;
        end
        else
        begin
            DetailBand1.Height:=40*((qry_gzt.fieldcount-3)div(v_column))+90;;
        end;end;
      

  5.   

    不是,其实我就是想实现如果为空,就不显示该字段的,不为空就显示,就象这样:
    工资号 姓名 工资 补资
    0001  fjy
      

  6.   

    不是,其实我就是想实现如果为空,就不显示该字段的,不为空就显示,就象这样:
    工资号 姓名 工资 补资
    0001  fjy  560  123
    工资号 姓名 工资 
    0001  fjy  560  
    象第二行补资没有,就不显示了
      

  7.   

    你的控件在preview事件中写,是直接对detailband上放吗?如果是这样的,好象动态不能解决
      

  8.   

    你的0001  fjy  560  123值是用qrdbtext做的,如果数据库中没有数据,它自然不会显示什么的
      

  9.   

    你的0001  fjy  560  123值是用qrdbtext做的,如果数据库中没有数据,它自然不会显示什么的 
      

  10.   

    但是我的工资号、姓名、工资、补资是用qrlabel做的,如何隐藏呢
      

  11.   

    是的是在detailband区,那我应该在什么地方写呢
      

  12.   

    可以,在query的aftersrcoll事件中,写:
    if xxx.asstring = '' then
      对应的qrlabel.caption := ‘’;