我想在DBGRID浏览我查询的东西,然后我查询什么我就能打印出查询的东西,任意
如我查询了
姓名   年龄    工作单位
???    ???      ??????  就打印这几个字段
如果我查询了姓名   年龄
???     ??
就打印这

解决方案 »

  1.   

    做一个支持打印功能的DBGrid的子类吧。
      

  2.   

    dev express grid + devexpress printsystem
    www.51delphi.com
      

  3.   

    你建立窗体(FrmPrint),上面放了checkboxlist控件,里面把dbgrid的columns列倒进入,然后对选择的项目进行打印到Excel中去,我下面有这个函数
    function Dbgridtoexcel(ADbgrid: TDbgrid;Allcolumns,Printcolumns: TStringlist): boolean;
    var
      excelobj, excel, workbook, sheet: olevariant;
      i, j, row, col: integer;
    begin
      result := false;
      try
        excelobj := createoleobject('excel.sheet');
        excel := excelobj.application;
        excel.visible := true;
        workbook := excel.workbooks.add;
        sheet := workbook.sheets[1];
      except
        messagebox(getactivewindow, '无法调用mircorsoft excel! ' + chr(13) + chr(10) +
          '请检查是否安装了mircorsoft excel。', '提示', mb_ok + mb_iconinformation);
        exit;
      end;
      sheet.activate;
    // 列标题
      row := 1;
      col := 1;
      ADbgrid.DataSource.DataSet.First;
      for i := 0 to Allcolumns.Count- 1 do
      begin
        if printcolumns.Strings[i] = '1' then
        begin
          sheet.cells(row, col) := Allcolumns.Strings[i];
          inc(col);
        end
      end;
    // 表内容
      for i := 0 to ADbgrid.DataSource.DataSet.RecordCount - 1 do
      begin
        row := row + 1;
        col := 1;
        for j := 0 to Allcolumns.Count - 1 do
        begin
          if printcolumns.Strings[j] = '1' then
          begin
            sheet.cells(row, col) :=ADbgrid.Fields[j].AsString;
            inc(col);
          end;
        end;
        ADbgrid.DataSource.DataSet.Next;
      end;
      result := true;
    end;
    Allcolumns是dbgrid的column列,printcolumns是你在FrmPrint中的checkboxlist选择的值列