做个报表,将报表的DATASET指向DBGRID的DATASET;或将DBGRID所在的FORM直接发送到打印机上去打印!

解决方案 »

  1.   

    Var
      ratio:Real;procedure PrintColLine(Const ItemList:TStringList;Const X,Y:Integer);
    Var
      PointLeft :Integer;
      Count :Integer;
    Begin
      PointLeft :=X;
      for Count :=0 to ItemList.Count -1 do
      Begin
        Printer.Canvas.TextOut(Round(PointLeft * ratio),Round(Y * ratio),
                                   ItemList.Strings[Count]);
        PointLeft :=PointLeft+Integer(ItemList.Objects[Count]);
      End;
    End;procedure PrintDBGridTitle(Const SourceDBGrid:TDBGrid);
    Begin
    End;procedure PrintDBGridItem(const SourceDBGrid:TDBGrid;Const X,Y:Integer);
    Begin
    End;function PrintDBGrid(Const SourceDBGrid:TDBGrid;Const IsVertical: Boolean):Boolean;
    var
      OrigPPI: Integer;
      CountRow :Integer;
      ItemList :TStringList;
      PointX,PointY :Integer;
    begin  Result :=False;  ratio := 14;  //打印纸与DBGRID比例
      //Printer.PageWidth / SourceDBGrid.Width;
      OrigPPI := Printer.Canvas.Font.PixelsPerInch;
      Printer.Canvas.Font.PixelsPerInch := Round(Printer.Canvas.Font.PixelsPerInch * ratio);
      if IsVertical then //横竖打印
        Printer.Orientation := poPortrait
      else
        Printer.Orientation := poLandScape;  printer.begindoc;
      ItemList :=TStringList.Create;
      Try    SourceDBGrid.DataSource.DataSet..First;
        PointX :=90;
        PointY :=0;    PrintDBGridTitle(SourceDBGrid);
        PointY :=PointY +15;
        Printer.Canvas.Font.Assign(SourceDBGrid.Font);
        for CountRow :=0 to SourceDBGrid.DataSource.DataSet.RecordCount -1 do
        Begin
          ItemList.Clear;
          PointX :=7;
          PointY :=PointY+4;
    //打印两个字段内容,如通用,则直接取SourceDBGrid显示的所有字段,取SourceDBGrid显示的所有字段知道怎 样取吧
          ItemList.AddObject(SourceDBGrid.DataSource.DataSet.FieldByName('CUST_ID').AsString, TObject(13));
          ItemList.AddObject(SourceDBGrid.DataSource.DataSet.FieldByName('DESTINATION').AsString, TObject(23)) ;
          PrintColLine(ItemList,PointX,PointY);
          SourceDBGrid.DataSource.DataSet.Next;
        End;
      finally
        ItemList.Free;
        Printer.EndDoc;    Printer.Canvas.Font.PixelsPerInch := OrigPPI;
        Result:=True;
      End;
    end;
      

  2.   

    http://www.chinaprogrammer.com/softshow/program/index.asp(报表)
    有打印dbgrid的例子
      

  3.   

    我在做上个项目时遇到过类似的问题,结果是用DbgridEh控件代替Dbgrid,
    DbgridEh控件是加强控件,自带有打印预览功能,并可通过各种属性指定
    如表头等信息,在DbgridEh中显示的数据通过调用其打印印预览功能方法
    可直接得到印预览并输出,很好用,我回头查一下上次项目的资料再回答你!!
    E-Mail:[email protected]
      

  4.   

    哪里有 tdbgrideh? 谢谢emial: [email protected]
      

  5.   

    我有TDBGridEh , DBSumLst ,PrnDGDlg三把斧!