UniGUI使用报表Grid++Repor的方法之二(动态调用)

UniGui中使用Grid++Report报表控件主要是通过TUniHTMLFrame控件中嵌入HTML代码来进行调用,我们可以直接在delphi中动态修改这个HTML代码来实现不同数据源及报表模板的报表打印与展示。下面是这是TUniHTMLFrame控件中的HTML属性的代码:

Web报表(B/S报表)演示 - 最简单例子,用插件在网页中展现报表,实际应用采用 simple_UseCreateControl.htm 的方式更简便          


注意其中的"#####"及"*****"我们在下面的代码中要动态替换掉这两个地方实现报表模板及数据的动态显示:

下面是Main.pas的代码,很简单:

unit Main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics,Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses,uniGUIClasses, uniGUIForm, uniGUIBaseClasses, uniPanel, uniURLFrame,uniHTMLFrame, uniButton,System.StrUtils;typeTMainForm = class(TUniForm)UniPanel1: TUniPanel;UniHTMLFrame1: TUniHTMLFrame;procedure UniFormCreate(Sender: TObject);private{ Private declarations }public{ Public declarations }end;function MainForm: TMainForm;implementation{$R *.dfm}usesuniGUIVars, MainModule, UntCommon, ServerModule;function MainForm: TMainForm;
beginResult := TMainForm(UniMainModule.GetFormInstance(TMainForm));
end;procedure TMainForm.UniFormCreate(Sender: TObject);
vars,f:string;t:TStringList;
begint:=nil;//创建时修改Html文件中的ReportUrl,和DataURL的参数。//s为打印的Html模板s :=  StringReplace(UniHTMLFrame1.HTML.Text,'####','files/simple.txt',[rfReplaceAll]);f:=   UniServerModule.LocalCacheURL+ 'simple.xml';   //定义报表数据URL的文件路径及文件名s :=  StringReplace(s,'****',f,[rfReplaceAll]);      //替换报表数据dataUrl为定义的文件名UniHTMLFrame1.HTML.Text :=s; //重新给UniHTMLFrame的html属性赋值tryt := TStringList.Create;s := DataSetToXml(UniMainModule.UniQuery1);   //转换DataSet数据到XMLt.Add(s);t.SaveToFile(f,TEncoding.UTF8);  //创建 报表数据文件文件并写入服务器硬盘,供报表调用finallyt.Free;end;end;initializationRegisterMainFormClass(TMainForm);end.

DataSetToXml命令是用于将dataset的数据转化为一个Grid++Report报表插件需求的xml数据格式,Grid++report报表插件的数据xml格式要求可以到Grid++Report的网站查询:http://www.rubylong.cn下面是DataSetToxml函数所有的UntCommon.pas单元的代码:

unit UntCommon;interfaceusesData.db,System.SysUtils,System.StrUtils;function  DataSetToXml(ADataset:tdataset):string;
function  SetLeftStr(Astring:string ):string;
function  SetRightStr(Astring:string ):string;implementation//这里生成一个符合Grid++Report约定的xml数据文件。
function DataSetToXml(ADataset: tdataset): string;
varFieldCount:Integer;I: Integer;
beginResult :='' +#13#10 ;ADataset.DisableControls;ADataset.First;while not ADataset.Eof dobeginResult := Result +' ';for I := 0 to ADataset.FieldCount-1 dobeginwith ADataset.Fields[i] docase DataType offtString:beginResult := Result + SetLeftStr(FieldName)+AsString+ SetRightStr(FieldName);end;ftSmallint,ftInteger,ftWord:beginResult := Result+ SetLeftStr(FieldName) +inttostr(AsInteger)+ SetRightStr(FieldName);end;ftBoolean:beginResult := Result + SetLeftStr(FieldName)+booltostr(asboolean)+ SetRightStr(FieldName);end;ftFloat,ftCurrency:beginResult := Result+SetLeftStr(FieldName)+FloatTostr(AsFloat)+ SetRightStr(FieldName);end;ftDate:beginResult := Result+SetLeftStr(FieldName)+DateToStr(AsDateTime)+ SetRightStr(FieldName);end;ftDateTime:beginResult := Result+SetLeftStr(FieldName)+DateTimeToStr(AsDateTime)+ SetRightStr(FieldName);end;ftAutoInc:beginResult := Result + SetLeftStr(FieldName)+inttostr(AsInteger)+ SetRightStr(FieldName);end;ftMemo:beginResult := Result+ SetLeftStr(FieldName)+AsString+ SetRightStr(FieldName);end;end;end;Result := Result +' '+#13#10  ;ADataset.Next;end;ADataset.EnableControls;Result :=Result +'';end;function SetLeftStr(Astring: string): string;
beginResult :='<'+astring+'>';
end;function SetRightStr(Astring: string): string;
beginResult :='';
end;end.

下面是在IE浏览器中正常运行时的截图:


目前Grid++Report还不能跨IE\谷歌\firefox浏览器使用,需要跨平台的朋友可以暂时无视。据说Grid++Report目前正在开发firefox的插件,以grid++report的一贯风格来讲,新旧版本的兼容性做的好,如果grid++report from firefox插件能推出来,旧项目的代码应该不会有太多修改,所以grid++report from firefox插件是一个非常值得期待的版本。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部