请指教:DBGRID 是否可以打印? 怎么打印求您详细说明。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);  const
           XSpace=50;
           YSpace=80;
      var
          x,y,i : integer;
    begin
      adoquery1.First;
      y:=100;
      printer.BeginDoc ;
      with adoquery1 do
        begin
          x:=0;
           for i:=0 to adoquery1.FieldCount-1 do
             begin
                printer.Canvas.TextOut(x,y,fields[i].DisplayName);
                x:=printer.Canvas.PenPos.x+xspace;
             end;
            y:=printer.Canvas.PenPos.y + YSpace;
            printer.Canvas.MoveTo(0,y);
            printer.Canvas.LineTo(x,y);
            y:=printer.Canvas.PenPos.y+YSpace;
            while not recordset.eof do
              begin
                x:=0 ;
                for i:=0 to fieldcount-1 do
                 begin
                   printer.Canvas.TextOut(x,y,adoquery1.fields[i].DisplayText);
                   x:=printer.Canvas.PenPos.x+xSpace;
                 end;
                next ; //记录下移一条
                y:=printer.Canvas.PenPos.y+ySpace;
              end;
          end;
          printer.Canvas.MoveTo (0,y);
          printer.Canvas.LineTo(x,y);
          printer.EndDoc ;
    end;
      

  2.   

    还可以把数据送到EXCEL来打印
      

  3.   

    我写过一个函数,专门实现DBGRID打印,但是太长了,不好贴出来
      

  4.   

    可以,首先你要明白QuickRep报表的打印机制,他首先打印报表开头部分,包括Title,ColumnTitle等等,然后会打印明细部分(Detail),在打印明细部分时可以指定QuickRep的Dataset属性,这样他会自己浏览该数据集,逐条打印相关的明细内容,然后再打印页脚等部分的内容,如果不指定DataSet,那么你必须在QuickRep的OnNeedData事件中自己写代码实现(给放在DetailBand上的相关QRLabel赋值,滚动数据集,控制QRLabel的位置等),通过NeedMoreData变量控制是否还有Detail行需要打印。
    而你说得dbgrid实际上是关联到某一个数据集的DBGrid.DataSource.DataSet,这样你就可以完成报表的打印了
      

  5.   

    我觉得你还是用Qreport来打印吧功能要好一些,一般来说直接的打印是不能满足你的要求的。
      

  6.   

    但同一个DBGRID却在程序中用来查询不同的表,不同的字段,怎么可能对每种情况
    都做一个报表等待调用呢,希望高手们不要避重就轻呀
      

  7.   

    PrintDBGridEh非常好用,很简单的。我就用他,查询后直接打印出来。
      

  8.   

    对,楼顶的
    ----------------------------
    你喜欢delphi吗?让我们一起交流吧;
    www.nxrs.net/bbs
    别扔砖啊,特别是斑竹;
    声明:只要可以交流,那儿都行,我还是认为csdn是最好的;
      

  9.   

    我曾经也有过这样的经历,多次探寻无果之后,我才发现用报表控件很轻松就解决了,我用的是FastReport,网上有其使用说明供下载!