Devexpress cxGrid görünümünü FastReport'a yazdırma

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Devexpress cxGrid görünümünü FastReport'a yazdırma

Mesaj gönderen csunguray »

cxGrid içerisindeki mevcut görünümü FastReport'a yazmaya yarayan hazır bir kod veya bileşen duyan veya gören var mıdır?
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Re: Devexpress cxGrid görünümünü FastReport'a yazdırma

Mesaj gönderen loribnaczo54 »

csunguray yazdı:cxGrid içerisindeki mevcut görünümü FastReport'a yazmaya yarayan hazır bir kod veya bileşen duyan veya gören var mıdır?
ben öyle bir çalışma yaptım
1. adım : formun nesneleri frxreport ve frxCrossObject1
2.adım : frxreport u dizayn modunda masterdata band i açın ve içine CrossView yerleştirin ve sadece [Column] bir tane alan olsun.
3.adım : frxreport un OnBeforePrint event ine

Kod: Tümünü seç

procedure TData.frxReport1BeforePrint(c: TfrxReportComponent);
begin
 if c is TfrxCrossView then
  begin
    Cross := TfrxCrossView(c);
          for a:=0 to GridAdi.ViewData.RowCount-1 do
           begin
            for b:=0 to GridAdi.ColumnCount-1 do
             begin
               if   (GridAdi.Columns[b].Visible=True)
                and (GridAdi.Bands[GridAdi.Columns[b].Position.BandIndex].Visible = True)
               then
                 Cross.AddValue([a], [GridAdi.Columns[b].Caption], [VarToStr(GridAdi.ViewData.Rows[a].Values[b])]);
             end;
           end;
  end;
end;

kodunu yerleştirin. Not : "procedure TData.frxReport1BeforePrint(c: TfrxReportComponent);" procedure tanımlamasına dikkat edin.

4.adım : ilgili yerde rapor görüntüsünü almak için frxReport1.Showreport demeniz yeterli olacaktır.

Bunun bir örneği zaten fastreport örneklerinde mevcut. Cross lama örneklerine bakmanı tavsiye ederim.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Mesaj gönderen csunguray »

Teşekkür ederim. Bu kod işime yarar. Ama asıl istediğim gruplama, grup toplamı, filtreler ve sıralamayı da (veya birkaçını) dikkate alan daha gelişmiş uygulama.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Mesaj gönderen loribnaczo54 »

csunguray yazdı:Teşekkür ederim. Bu kod işime yarar. Ama asıl istediğim gruplama, grup toplamı, filtreler ve sıralamayı da (veya birkaçını) dikkate alan daha gelişmiş uygulama.
aslinda söylediğin yapilabilir. ama ben onun gibi formlarda genelde ExpressPrinting System kullanıyorum. ama senin istediğinde bu fonksiyon ile biraz çaba gösterilerek yapilabilir. sonuçta dönen alanı okutabiliyorsun eğer dönen alan bir gruplama ise ona göre cross column yerleştirebilirsin. veya dönen alan bir gruplama ise yine aynı şekilde yapabilirsin. uygun bir zaman bulabilirsem bakmaya çalışırım.
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: Devexpress cxGrid görünümünü FastReport'a yazdırma

Mesaj gönderen smokie »

loribnaczo54 yazdı:
csunguray yazdı:cxGrid içerisindeki mevcut görünümü FastReport'a yazmaya yarayan hazır bir kod veya bileşen duyan veya gören var mıdır?
ben öyle bir çalışma yaptım
1. adım : formun nesneleri frxreport ve frxCrossObject1
2.adım : frxreport u dizayn modunda masterdata band i açın ve içine CrossView yerleştirin ve sadece [Column] bir tane alan olsun.
3.adım : frxreport un OnBeforePrint event ine

Kod: Tümünü seç

procedure TData.frxReport1BeforePrint(c: TfrxReportComponent);
begin
 if c is TfrxCrossView then
  begin
    Cross := TfrxCrossView(c);
          for a:=0 to GridAdi.ViewData.RowCount-1 do
           begin
            for b:=0 to GridAdi.ColumnCount-1 do
             begin
               if   (GridAdi.Columns[b].Visible=True)
                and (GridAdi.Bands[GridAdi.Columns[b].Position.BandIndex].Visible = True)
               then
                 Cross.AddValue([a], [GridAdi.Columns[b].Caption], [VarToStr(GridAdi.ViewData.Rows[a].Values[b])]);
             end;
           end;
  end;
end;

kodunu yerleştirin. Not : "procedure TData.frxReport1BeforePrint(c: TfrxReportComponent);" procedure tanımlamasına dikkat edin.

4.adım : ilgili yerde rapor görüntüsünü almak için frxReport1.Showreport demeniz yeterli olacaktır.

Bunun bir örneği zaten fastreport örneklerinde mevcut. Cross lama örneklerine bakmanı tavsiye ederim.
hocam burada kullanılan grid StringGrid mi, DbGrid üzerinde de kullanılabilirmi.
fastreport demosunda yeralan örnekte StringGrid, DBGrid üzerinde uygulanabilirmi.
vermişoldugunuz kodu dbgrid üzerinden demeye calıştım olmadı
DBGrid de ViewData özelliği yok sanırım burada hata veriyor
alp64
Üye
Mesajlar: 1
Kayıt: 16 Tem 2010 06:03

Re: Devexpress cxGrid görünümünü FastReport'a yazdırma

Mesaj gönderen alp64 »

{**************************************
This component created by N. Alp ÖZALP
*************************************}

unit DxDataSetFastReport;

interface
uses
SysUtils, Classes, frxClass,cxGridTableView;

type

TdxDataSetFastReport = class(TfrxUserDataSet)
private
FcxGridTableView:TcxGridTableView;
LastPrinted:Boolean;
FAutoExpand:Boolean;
Function HasTable:Boolean;
Procedure SetcxGridTableView(Value:TcxGridTableView);
Function IsGroupCaptionControl(GotoNext:Boolean):Boolean;
Procedure Expanded;
protected
{ Protected declarations }
public

procedure CheckEOF(Sender: TObject;var Eof: Boolean);
procedure First(Sender: TObject);
procedure GetValue(const VarName: string;var Value: Variant);
procedure NewGetValue(Sender: TObject;const VarName: string; var Value: Variant);
procedure Next(Sender: TObject);
procedure Prior(Sender: TObject);
published
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
Property cxGridTableView:TcxGridTableView read FcxGridTableView Write SetcxGridTableView;
Property AutoExpand:Boolean Read FAutoExpand Write FAutoExpand;

end;

procedure Register;

implementation

constructor TdxDataSetFastReport.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OnCheckEOF:=CheckEOF;
OnFirst:=First;
OnGetValue:=GetValue;
OnNewGetValue:=NewGetValue;
OnNext:=Next;
OnPrior:=Prior;
end;

destructor TdxDataSetFastReport.Destroy;
begin

inherited;
end;

Function TdxDataSetFastReport.HasTable:Boolean;
begin
Result:=Assigned(FcxGridTableView);
end;

Procedure TdxDataSetFastReport.Expanded;
begin
if FAutoExpand then
FcxGridTableView.Controller.FocusedRow.Expand(True);
end;

Procedure TdxDataSetFastReport.SetcxGridTableView(Value:TcxGridTableView);
var i:integer;
begin
FcxGridTableView:=Value;
Fields.Clear;
for i:=0 to FcxGridTableView.ColumnCount-1 do Fields.Add(FcxGridTableView.Columns.Name);
end;

Function TdxDataSetFastReport.IsGroupCaptionControl(GotoNext:Boolean):Boolean;
begin
Result:=false;
if GotoNext then begin
While (not FcxGridTableView.DataController.IsEOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow) do begin
Expanded;
FcxGridTableView.DataController.GotoNext;
end;
Result:=(FcxGridTableView.DataController.IsEOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow);
end else begin
While (not FcxGridTableView.DataController.IsBOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow) do begin
Expanded;
FcxGridTableView.DataController.GotoPrev;
end;
Result:=(FcxGridTableView.DataController.IsBOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow);
end;
end;

procedure TdxDataSetFastReport.CheckEOF(Sender: TObject;var Eof: Boolean);
begin
eof:=IsGroupCaptionControl(true);//Grup varsa atla
if not eof then
EOF := (not HasTable)or(FcxGridTableView.ViewData.RecordCount=0)or
(FcxGridTableView.ViewData.RecordCount=FcxGridTableView.GroupedItemCount)or
((LastPrinted)and(FcxGridTableView.DataController.IsEOF));
LastPrinted:=FcxGridTableView.DataController.IsEOF;
end;

procedure TdxDataSetFastReport.First(Sender: TObject);
begin
LastPrinted:=False;
if (HasTable)then begin
FcxGridTableView.DataController.GotoFirst;
Expanded;
IsGroupCaptionControl(true);//Grup varsa atla
end;
end;

procedure TdxDataSetFastReport.GetValue(const VarName: string;var Value: Variant);
var i:integer;
begin
for i:=0 to FcxGridTableView.ColumnCount-1 do
if Varname=FcxGridTableView.Columns.Name then begin
Value:=FcxGridTableView.Controller.FocusedRow.Values;
// Value:=FcxGridTableView.Columns.EditValue; de olur
Break;
end;
end;

procedure TdxDataSetFastReport.NewGetValue(Sender: TObject;const VarName: string; var Value: Variant);
begin

end;

procedure TdxDataSetFastReport.Next(Sender: TObject);
begin
if (HasTable) then begin
Expanded;
FcxGridTableView.DataController.GotoNext;
IsGroupCaptionControl(true);//Grup varsa atla
end;
end;

procedure TdxDataSetFastReport.Prior(Sender: TObject);
begin
if (HasTable) then begin
Expanded;
FcxGridTableView.DataController.GotoPrev;
IsGroupCaptionControl(False); //Grup varsa At
end;
end;


procedure Register;
begin
RegisterComponents('dev Express', [TdxDataSetFastReport]);
end;

end.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Devexpress cxGrid görünümünü FastReport'a yazdırma

Mesaj gönderen Lost Soul »

Kod: Tümünü seç

{**************************************
This component created by N. Alp ÖZALP
*************************************}

unit DxDataSetFastReport;

interface
uses
SysUtils, Classes, frxClass,cxGridTableView;

type

TdxDataSetFastReport = class(TfrxUserDataSet)
private
FcxGridTableView:TcxGridTableView;
LastPrinted:Boolean;
FAutoExpand:Boolean;
Function HasTable:Boolean;
Procedure SetcxGridTableView(Value:TcxGridTableView);
Function IsGroupCaptionControl(GotoNext:Boolean):Boolean;
Procedure Expanded;
protected
{ Protected declarations }
public

procedure CheckEOF(Sender: TObject;var Eof: Boolean);
procedure First(Sender: TObject);
procedure GetValue(const VarName: string;var Value: Variant);
procedure NewGetValue(Sender: TObject;const VarName: string; var Value: Variant);
procedure Next(Sender: TObject);
procedure Prior(Sender: TObject);
published
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
Property cxGridTableView:TcxGridTableView read FcxGridTableView Write SetcxGridTableView;
Property AutoExpand:Boolean Read FAutoExpand Write FAutoExpand;

end;

procedure Register;

implementation

constructor TdxDataSetFastReport.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OnCheckEOF:=CheckEOF;
OnFirst:=First;
OnGetValue:=GetValue;
OnNewGetValue:=NewGetValue;
OnNext:=Next;
OnPrior:=Prior;
end;

destructor TdxDataSetFastReport.Destroy;
begin

inherited;
end;

Function TdxDataSetFastReport.HasTable:Boolean;
begin
Result:=Assigned(FcxGridTableView);
end;

Procedure TdxDataSetFastReport.Expanded;
begin
if FAutoExpand then
FcxGridTableView.Controller.FocusedRow.Expand(True);
end;

Procedure TdxDataSetFastReport.SetcxGridTableView(Value:TcxGridTableView);
var i:integer;
begin
FcxGridTableView:=Value;
Fields.Clear;
for i:=0 to FcxGridTableView.ColumnCount-1 do Fields.Add(FcxGridTableView.Columns[i].Name);
end;

Function TdxDataSetFastReport.IsGroupCaptionControl(GotoNext:Boolean):Boolean;
begin
Result:=false;
if GotoNext then begin
While (not FcxGridTableView.DataController.IsEOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow) do begin
Expanded;
FcxGridTableView.DataController.GotoNext;
end;
Result:=(FcxGridTableView.DataController.IsEOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow);
end else begin
While (not FcxGridTableView.DataController.IsBOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow) do begin
Expanded;
FcxGridTableView.DataController.GotoPrev;
end;
Result:=(FcxGridTableView.DataController.IsBOF)and(FcxGridTableView.Controller.FocusedRow is TcxGridGroupRow);
end;
end;

procedure TdxDataSetFastReport.CheckEOF(Sender: TObject;var Eof: Boolean);
begin
eof:=IsGroupCaptionControl(true);//Grup varsa atla
if not eof then
EOF := (not HasTable)or(FcxGridTableView.ViewData.RecordCount=0)or
(FcxGridTableView.ViewData.RecordCount=FcxGridTableView.GroupedItemCount)or
((LastPrinted)and(FcxGridTableView.DataController.IsEOF));
LastPrinted:=FcxGridTableView.DataController.IsEOF;
end;

procedure TdxDataSetFastReport.First(Sender: TObject);
begin
LastPrinted:=False;
if (HasTable)then begin
FcxGridTableView.DataController.GotoFirst;
Expanded;
IsGroupCaptionControl(true);//Grup varsa atla
end;
end;

procedure TdxDataSetFastReport.GetValue(const VarName: string;var Value: Variant);
var i:integer;
begin
for i:=0 to FcxGridTableView.ColumnCount-1 do
if Varname=FcxGridTableView.Columns[i].Name then begin
Value:=FcxGridTableView.Controller.FocusedRow.Values[i];
// Value:=FcxGridTableView.Columns[i].EditValue; de olur
Break;
end;
end;

procedure TdxDataSetFastReport.NewGetValue(Sender: TObject;const VarName: string; var Value: Variant);
begin

end;

procedure TdxDataSetFastReport.Next(Sender: TObject);
begin
if (HasTable) then begin
Expanded;
FcxGridTableView.DataController.GotoNext;
IsGroupCaptionControl(true);//Grup varsa atla
end;
end;

procedure TdxDataSetFastReport.Prior(Sender: TObject);
begin
if (HasTable) then begin
Expanded;
FcxGridTableView.DataController.GotoPrev;
IsGroupCaptionControl(False); //Grup varsa At
end;
end;


procedure Register;
begin
RegisterComponents('dev Express', [TdxDataSetFastReport]);
end;

end.
Daha güzel görünür. :)
Cevapla