Devexpress cxGrid görünümünü FastReport'a yazdırma
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.
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.
Devexpress cxGrid görünümünü FastReport'a yazdırma
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/)
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/)
- 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
ben öyle bir çalışma yaptımcsunguray 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?
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;
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.
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/)
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/)
- loribnaczo54
- Üye
- Mesajlar: 60
- Kayıt: 24 Nis 2006 07:42
- Konum: Bahçelievler/İst.
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.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.
Re: Devexpress cxGrid görünümünü FastReport'a yazdırma
hocam burada kullanılan grid StringGrid mi, DbGrid üzerinde de kullanılabilirmi.loribnaczo54 yazdı:ben öyle bir çalışma yaptımcsunguray 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?
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 inekodunu yerleştirin. Not : "procedure TData.frxReport1BeforePrint(c: TfrxReportComponent);" procedure tanımlamasına dikkat edin.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;
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.
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
Re: Devexpress cxGrid görünümünü FastReport'a yazdırma
{**************************************
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.
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.
Re: Devexpress cxGrid görünümünü FastReport'a yazdırma
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.