人家要用DBGrid啊
用QuickReport谁不会呢!大侠们

解决方案 »

  1.   

    //希望能帮你一点忙
    http://www.csdn.net/expert/topic/433/433591.shtm
      

  2.   

    唉!那就是一个联QuickReport的
    我在整理一个Excel的给你
      

  3.   

    用ehlib控件
    带打印控件,符合你的要求
      

  4.   

    一个DBgeid也就几十行数据,能不能用像写进Word表格那种类似的方式将其写到打印机上呢?如何写?怎么控制??
      

  5.   

    uses
      Excel2000;function DataSetToText(mDataSet: TDataSet): string;
    var
      vBook: string;
      I: Integer;
      S: string;
    begin
      Result := '';
      vBook := mDataSet.Book;
      mDataSet.First;
      while not mDataSet.Eof do begin
        S := '';
        for I := 0 to mDataSet.FieldList.Count - 1 do
          S := S + #9 + mDataSet.FieldList[I].DisplayText;
        Delete(S, 1, 1);
        Result := Result + S + #13#10;
        mDataSet.Next;
      end;
      mDataSet.Book := vBook;
    end; { DataSetToText }function FieldNames(mDataSet: TDataSet; mDelimiter: string = ';'): string;
    begin
      Result := StringReplace(Trim(mDataSet.FieldList.Text), #13#10, mDelimiter,
        [rfReplaceAll]);
    end; { FieldNames }procedure DataSetPrintToExcel(mDataSet: TDataSet; mFileName: TFileName;
      mTitleText: string = ''; mHeadText: string = ''; mTrailText: string = '');
    var
      vTemplate: OleVariant;
      vStringList: TStringList;
    begin
      vStringList := TStringList.Create;
      with TExcelApplication.Create(nil) do try
        vStringList.Text := FieldNames(mDataSet, #9) + #13#10 + DataSetToText(mDataSet);
        if mTitleText <> '' then
          vStringList.Text := mTitleText + #13#10 + vStringList.Text;
        if mHeadText <> '' then
          vStringList.Text := mHeadText + #13#10 + vStringList.Text;
        if mTrailText <> '' then
          vStringList.Text := vStringList.Text + #13#10 + mTrailText;
        vStringList.SaveToFile(mFileName);
        Connect;
        Visible[0] := True;
        vTemplate := EmptyParam;
        vTemplate := mFileName;
        Workbooks.Add(vTemplate, 0);
        Columns.EntireColumn.AutoFit;
        Disconnect;
      finally
        Free;
        vStringList.Free;
      end;
    end; { DataSetPrintToExcel }procedure TForm1.Button1Click(Sender: TObject);
    begin
      DataSetPrintToExcel(DBGrid1.DataSource.DataSet, 'C:\Temp\1.txt', 'Excel打印');
    end;
      

  6.   

    请问ZengXi():在那里能找到此控件,你有吗,能不能给我E一份?
    我的E-mail是[email protected]
      

  7.   

    uses
      Printers;function DataSetToText(mDataSet: TDataSet): string;
    var
      vBook: string;
      I: Integer;
      S: string;
    begin
      Result := '';
      vBook := mDataSet.Book;
      mDataSet.First;
      while not mDataSet.Eof do begin
        S := '';
        for I := 0 to mDataSet.FieldList.Count - 1 do
          S := S + #9 + mDataSet.FieldList[I].DisplayText;
        Delete(S, 1, 1);
        Result := Result + S + #13#10;
        mDataSet.Next;
      end;
      mDataSet.Book := vBook;
    end; { DataSetToText }function FieldNames(mDataSet: TDataSet; mDelimiter: string = ';'): string;
    begin
      Result := StringReplace(Trim(mDataSet.FieldList.Text), #13#10, mDelimiter,
        [rfReplaceAll]);
    end; { FieldNames }procedure TextToCanvas(mText: string; mCanvas: TCanvas; mMove: TPoint);
    { 将多行文本输出到画布上 }
    var
      I: Integer;
      vTextHeight: Integer;
      vStringList: TStringList;
    begin
      vStringList := TStringList.Create;
      vStringList.Text := mText;
      with vStringList, mCanvas do begin
        vTextHeight := TextHeight('|');
        for I := 0 to Pred(vStringList.Count) do
          TextOut(mMove.X, mMove.Y + vTextHeight * I, vStringList[I]);
      end;
      vStringList.Free;
    end; { TextToCanvas }procedure TForm1.Button1Click(Sender: TObject);
    begin
      Printer.BeginDoc;
      TextToCanvas(FieldNames(DBGrid1.DataSource.DataSet, #9) + #13#10 +
        DataSetToText(DBGrid1.DataSource.DataSet), Printer.Canvas, Point(10, 10));
      Printer.EndDoc;
    end;
      

  8.   

    我有一个把DBGRID中的数据导到EXCEL中去的控件,非常好用不知你要不要?
      

  9.   

    To:zswang(伴水)(需要充充电):我先试试的方法。
    To:humer(humer) :行,在这先谢了[email protected],最好将重用方法也一同告诉我!
      

  10.   

    谢谢zswang(伴水)(需要充充电):根据您的指点,我已经解决此问题。
    另外,我想附加问你一个问题:那就是根据你的第二个例子,好像只能打印DBgrid的正文,而标题却打不出来,请问该怎么打印?用s:=s + dbgrid1.columns[k].title.caption却不能把标题和下面的正文对齐,可有好办法??
    不过,主要问题已经解决,分好就给了,请不要嫌少! 
      

  11.   

    最原始的方法,也是最灵活的方法,TPrinter自己写代码
      

  12.   

    DownLoad A DBGridEh,非常好用,支持打印。我这里还有一个改进型
    的,支持栏头栏尾字体设置,需要的话,请来信。[email protected].