我用DBGridEH显示统计信息,同时可以随意选择显示的列。然后用fastreport3.0打印统计信息。
各位大哥大姐帮帮忙,小弟不知道如何实现。
小弟只会frReport和frDBDataSet。

解决方案 »

  1.   

    { 清除报表元件的內容 }
      frxReport1.Clear;                           { 清除报表元件的內容 }
      frxReport1.DataSets.Add(frxDBDataSet1);     { 加入数据集至报表}  { 加入页面 }
      Page := TfrxReportPage.Create(frxReport1);  { 加入页面 }
      Page.CreateUniqueName;                      { 建立唯一的页面名称 }
      Page.SetDefaults;                           { 设定预置的字段、纸张大小 }
      //Page.Orientation := poLandscape;            { 修改纸张的方向}   // use Printers 值需要引用单元 ;  { 加入顶部公司标志 }
      Band := TfrxReportTitle.Create(Page);       { 加入报表标题区域}
      Band.CreateUniqueName;
      Band.Top := 0;    { 坐标的单位采用象素(pixels) }
      Band.Height := 40;  Memo := TfrxMemoView.Create(Band);          { 加入物件至报表标题区域}
      Memo.CreateUniqueName;                      { 建立唯一的变量名称 }
      Memo.Text := '有限公司';
      Memo.Height := 25;
      Memo.Align := baWidth;                      { 物件自动调整大小与区域同宽 }
      Memo.Frame.Typ := [ftBottom] ;              { 底部线条 }
      Memo.Frame.Width := 2 ;  { 加入主数据区表头 }
      HeadBand:= TfrxPageHeader.Create(page);
      HeadBand.CreateUniqueName ;
      HeadBand.Height := 25 ;
      //HeadBand.SetBounds(0,0,1000,25);  { 加入物件至数据区表头 }
      for i:=ADOQuery1.FieldCount-1 downto 0 do
      begin
        Memo := TfrxMemoView.Create(HeadBand);
        Memo.CreateUniqueName;
        Memo.Text := ADOQuery1.Fields[i].FieldName;
        Memo.SetBounds(i*100 , 0, 95, 25); { 95为宽度,100为下一个列表的起点,这样才有间隔出现 }
       // Memo.HAlign := haCenter;          { 调整文字至物件的右边界 }
        Memo.HAlign := haCenter;          { 调整文字至物件的右边界 }
        Memo.VAlign := vaCenter ;         { 垂直对齐 }
        Memo.Align := baNone ;
        Memo.Align := baRight ;
       // Memo.Font.Color := clYellow ;     { 文字颜色 }
       // Memo.Color := clBlue ;            { 背景颜色 }
        Memo.Frame.Typ := [ftLeft, ftRight, ftTop, ftBottom] ;  { 边框 }
      end;  { 加入主数据区域 }
      DataBand := TfrxMasterData.Create(Page);
      DataBand.CreateUniqueName;
      DataBand.DataSet := frxDBDataSet1;
      { Top 坐标必须大于前一个加入区域的top + height}
      DataBand.Top := 100;
      DataBand.Height := 30;  { 加入物件 做为背景色条 }
      Memo := TfrxMemoView.Create(DataBand);          { 加入物件至报表标题区域}
      Memo.CreateUniqueName;                      { 建立唯一的变量名称 }
      Memo.DataSet := frxDBDataSet1;  { 连接至数据 }
      Memo.Height := 23;
      Memo.width := ADOQuery1.FieldCount * 100 ;
      Memo.top := 5 ;
      //背景色 各行不一样
      Memo.Highlight.Color := RGB($F0,$F0,$F0) ;
      Memo.Highlight.Condition := '<Line#> mod 2';  { 加入物件至主数据区域}
      for i:=0 to ADOQuery1.FieldCount-1 do
      begin
        Memo := TfrxMemoView.Create(DataBand);
        Memo.CreateUniqueName;
        Memo.DataSet := frxDBDataSet1;  { 连接至数据 }
        Memo.DataField := ADOQuery1.Fields[i].FieldName;
        Memo.SetBounds(i*100, 0, 100, 30 );
        Memo.HAlign := haLeft;          { 调整文字至物件的右边界 }
        Memo.VAlign := vaCenter ;         { 垂直对齐 }
        //Memo.Frame.Typ := [ftLeft, ftRight, ftTop, ftBottom] ;  { 边框 }
      end;  { 显示报表 }
      frxReport1.PrepareReport(false) ;
      frxReport1.Preview := frxPreview1 ;
      frxReport1.ShowReport ;