DBGrid'in durumuna göre Rapor...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

DBGrid'in durumuna göre Rapor...

Mesaj gönderen ademiz »

Arkadaşlar tekrar Merhaba

Kullandığım Query ile ComboBox'u her seçtiğimde DBGrid farklı bir içeriği ekrana getiriyor.

Benim burda sormak istediğim.
Her seferinde (ComboBox'tan seçildikçe) DBGrid'teki sonucu RaveReport la yazdırmak için DBGrid çıktısına ayrı ayrı rapor mu dizayn etmem gerekiyor.

Yoksa içeriği Query ile değişen DBGrid'e tek rapor hazırlasam olabilirmi?

Kolay gelsin
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Tabi ki en güzeli DBGrid'i parametre olarak alan bir fonksiyonun raporlama işini yapması olur.... Boylece bir defa uğraşıp gerektiğinde her zaman kullanabilirsiniz....

Benzer bir konuda benim de ihtiyacım olmuştu ve aynı işi QucikReport ile yapan bir fonksiyon yazmıştık.. Sanırım işinizi gorur... ;)

Kod: Tümünü seç

procedure Grid_Rapor(VAR_GRID:TwwDBGrid;VAR_BASLIK:string);
var
  FRM_GRID_RAPOR:TForm;
  QRP_MASTER:TQuickRep;
  QRB_TITLE,QRB_DETAIL, QRB_SUMMARY,QRB_FOOTER:TQRBand;
  VAR_SAYAC,VAR_SOL_HIZA:Smallint;
  VAR_STRING, VAR_ALAN_ADI:string;
  VAR_ALINGMENT:TAlignment;
begin
  Application.CreateForm(TForm,FRM_GRID_RAPOR);
  FRM_GRID_RAPOR.Width:=700;
  FRM_GRID_RAPOR.Height:=800;
  QRP_MASTER:=TQuickRep.Createnew(FRM_GRID_RAPOR);
  QRP_MASTER.DataSet:=VAR_GRID.DataSource.DataSet;
  QRB_TITLE:=QRP_MASTER.CreateBand(rbTitle);
  QRB_DETAIL:=QRP_MASTER.CreateBand(rbDetail);
  QRB_SUMMARY:=QRP_MASTER.CreateBand(rbSummary);
  QRB_FOOTER:=QRP_MASTER.CreateBand(rbPageFooter);
  QRB_TITLE.Height:=100;
  QRB_DETAIL.Height:=22;
  QRB_SUMMARY.Height:=50;
  QRB_FOOTER.Height:=30;
  VAR_SOL_HIZA:=10;
  with TQRLabel.Create(QRB_TITLE) do
  begin
    Parent:=QRB_TITLE;
    Top:=20;
    Font.Name:='Times New Roman';
    Font.Size:=16;
    Font.Style:=[fsBold];
    Height:=18;
    Visible:=True;
    Caption:=VAR_BASLIK;
    Alignment:=taCenter;
    Left:=Round((QRP_MASTER.Width-Width)/2);
  end;

  for VAR_SAYAC:=0 to VAR_GRID.Selected.Count-1  do
  begin
    VAR_ALAN_ADI:=Copy(VAR_GRID.Selected[VAR_SAYAC],1,Pos(#9,VAR_GRID.Selected[VAR_SAYAC])-1);
    if VAR_GRID.DataSource.DataSet.FieldByName(VAR_ALAN_ADI).DataType in [ftSmallint, ftInteger, ftFloat,ftCurrency,ftLargeInt] then
      VAR_ALINGMENT:=taRightJustify
    else
      VAR_ALINGMENT:=taLeftJustify;
    with TQRLabel.Create(QRB_TITLE) do
    begin
      Parent:=QRB_TITLE;
      Top:=75;
      Font.Name:='Times New Roman';
      Font.Size:=8;
      Font.Style:=[fsBold];
      AutoSize:=False;
      Left:=VAR_SOL_HIZA;
      Width:=Round(VAR_GRID.ColWidths[VAR_SAYAC+1]);
      Height:=18;
      Visible:=True;
      Caption:=VAR_GRID.DataSource.DataSet.FieldByName(VAR_ALAN_ADI).DisplayLabel;
      Alignment:=VAR_ALINGMENT;
    end;
    with TQRDBText.Create(QRB_DETAIL) do
    begin
      Parent:=QRB_DETAIL;
      Top:=1;
      Font.Name:='Times New Roman';
      Font.Size:=8;
      AutoSize:=False;      
      Left:=VAR_SOL_HIZA;
      Width:=Round(VAR_GRID.ColWidths[VAR_SAYAC+1]);
      Height:=18;
      Visible:=True;
      DataSet:=VAR_GRID.DataSource.DataSet;
      DataField:=VAR_ALAN_ADI;
      Alignment:=VAR_ALINGMENT;
    end;
    VAR_SOL_HIZA:=VAR_SOL_HIZA+5+Round(VAR_GRID.ColWidths[VAR_SAYAC+1]);
  end;
  QRP_MASTER.Preview;

end;
Unutmadan bu kod Infopower'in wwDBGrid'i icin yazılmış bir kod. Fakat zannedersem donuştürmek zor olmaz. Hatta belki

Kod: Tümünü seç

procedure Grid_Rapor(VAR_GRID:TwwDBGrid;VAR_BASLIK:string);
yerine

Kod: Tümünü seç

procedure Grid_Rapor(VAR_GRID:TDBGrid;VAR_BASLIK:string);
yazmak bile yeterli olabilir...
Bundan bağımsız olarak bu işi yapan componentler filan da var aslında... Ama genelde ücretli. Free bulamayınca yazmıştık biz de.... Developer express'in dxGrid'inin printing system ile birlikte bu yetenegi var ayrıca.... Tabi o da ücretli...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Cevapla