UniGui中使用Grid++Report报表控件子报表获取数据的方法
Posted westsoft
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UniGui中使用Grid++Report报表控件子报表获取数据的方法相关的知识,希望对你有一定的参考价值。
Grid++Report是为优秀的报表控件,子报表是其重要功能之一,但Grid++Report提供的网页报表示范主要是以页面为主的,UniGui在Delphi中以快速编写web管理软件著称,但由于资料文档很少,经过摸索,Grid++Report的子报表要在uniGUi中正确获取子报表数据,只能通过Ajax数据回调的方式进行,在uniGUi中对前端Ajax的响应,就要是通过控件的AjaxEvent事件来处理。报表模板的展示部分的html代码要放在UniURLFrame控件的HTML属性中。
AjaxEvent事件函数如下:
FormAjaxEvent(Sender: TComponent; EventName: string; Params: TStrings);
EventName代表浏览器前端传入的事件名称
Params 浏览器前端传入的参数
UniURLFrame中的网页代码:
其中:
{xmlTop10Product}
{xmlProductList}
{xmlTop10Customer}
{xmlCustomer}
这几个地方需要在服务端运行时替换为UniGui可以识别的回调URL地址。
---------------------
作者:shuiying
来源:CSDN
原文:https://blog.csdn.net/shuiying/article/details/49948667
版权声明:本文为博主原创文章,转载请附上博文链接!
<span style="font-family: Arial, Helvetica, sans-serif;"><head></span> <title>Web报表(B/S报表)演示 - 子报表,子报表模板集成定义</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <script src="files/CreateControl.js" type="text/javascript"></script> <script type="text/javascript"> var CustomerReport; var ProductReport; var Top10CustomerReport; var Top10ProductReport; //在网页初始加载时向报表提供数据 function window_onload() { CustomerReport = ReportViewer.Report.ControlByName("srCustomerList").AsSubReport.Report; ProductReport = ReportViewer.Report.ControlByName("srProductList").AsSubReport.Report; Top10CustomerReport = ReportViewer.Report.ControlByName("srTop10Customer").AsSubReport.Report; Top10ProductReport = ReportViewer.Report.ControlByName("srTop10Product").AsSubReport.Report; //关联事件 CustomerReport.OnInitialize = OnCustomerInitialize; ProductReport.OnInitialize = OnProductInitialize; Top10CustomerReport.OnInitialize = OnTop10CustomerInitialize; Top10ProductReport.OnInitialize = OnTop10ProductInitialize; //开启报表生成进度条显示 // ReportViewer.Report.ShowProgressUI = true; //启动运行 ReportViewer.Start(); } function OnCustomerInitialize() { //载入子报表数据 CustomerReport.LoadDataFromURL("{xmlCustomer}"); } function OnProductInitialize() { //载入子报表数据 ProductReport.LoadDataFromURL("{xmlProductList}"); } function OnTop10CustomerInitialize() { //载入子报表数据 Top10CustomerReport.LoadDataFromURL("{xmlTop10Customer}"); } function OnTop10ProductInitialize() { //载入子报表数据 Top10ProductReport.LoadDataFromURL("{xmlTop10Product}"); } </script> <style type="text/css"> html,body { margin:0; height:100%; } </style> </head> <body style="margin:0" onload="window_onload()"> <script type="text/javascript"> CreatePrintViewerEx("100%", "100%", "files/4a.grf", "", false, ""); </script> </body> --------------------- 作者:shuiying 来源:CSDN 原文:https://blog.csdn.net/shuiying/article/details/49948667 版权声明:本文为博主原创文章,转载请附上博文链接!
Delphi中Main单元的代码:
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses, uniGUIClasses, uniGUIRegClasses, uniGUIForm, Data.DB, Datasnap.DBClient, uniToolBar, uniGUIBaseClasses, uniPanel, uniHTMLFrame, uniURLFrame; type TMainForm = class(TUniForm) UniToolBar1: TUniToolBar; btnClose: TUniToolButton; cdsCDS1: TClientDataSet; UniURLFrame1: TUniURLFrame; procedure UniFormCreate(Sender: TObject); procedure UniFormAjaxEvent(Sender: TComponent; EventName: string; Params: TStrings); procedure btnCloseClick(Sender: TObject); private { Private declarations } public procedure ReplaceTags; { Public declarations } end; function MainForm: TMainForm; implementation {$R *.dfm} uses uniGUIVars, MainModule, uniGUIApplication; function MainForm: TMainForm; begin Result := TMainForm(UniMainModule.GetFormInstance(TMainForm)); end; procedure TMainForm.btnCloseClick(Sender: TObject); begin UniMainModule.Terminate; end; procedure TMainForm.ReplaceTags; var S, Sc : string; begin S:=UniURLFrame1.HTML.Text; Sc:=UniSession.CallbackUrl(‘subReportData‘, Self, [‘RES‘, ‘xmlCustomer‘]); S:=StringReplace(S, ‘{xmlCustomer}‘, Sc, []); Sc:=UniSession.CallbackUrl(‘subReportData‘, Self, [‘RES‘, ‘xmlProductList‘]); S:=StringReplace(S, ‘{xmlProductList}‘, Sc, []); Sc:=UniSession.CallbackUrl(‘subReportData‘, Self, [‘RES‘, ‘xmlTop10Product‘]); S:=StringReplace(S, ‘{xmlTop10Product}‘, Sc, []); Sc:=UniSession.CallbackUrl(‘subReportData‘, Self, [‘RES‘, ‘xmlTop10Customer‘]); S:=StringReplace(S, ‘{xmlTop10Customer}‘, Sc, []); UniURLFrame1.HTML.Text:=S; end; procedure TMainForm.UniFormAjaxEvent(Sender: TComponent; EventName: string; Params: TStrings); var st:TStringList; begin if EventName=‘subReportData‘ then //定义的子报表数据回调事件 begin if Params.Values[‘RES‘]=‘xmlCustomer‘ then //根据Res参数判断是哪一个子报表请求数据 begin try st := TStringList.Create; st.LoadFromFile(ExtractFilePath(Application.ExeName)+‘dataxmlCustomer.xml‘); UniSession.AResponse.ContentText := st.Text; finally st.Free; end; end; if Params.Values[‘RES‘]=‘xmlProductList‘ then begin try st := TStringList.Create; st.LoadFromFile(ExtractFilePath(Application.ExeName)+‘dataxmlProductList.xml‘); UniSession.AResponse.ContentText := st.Text; finally st.Free; end; end; if Params.Values[‘RES‘]=‘xmlTop10Product‘ then begin try st := TStringList.Create; st.LoadFromFile(ExtractFilePath(Application.ExeName)+‘dataxmlTop10Product.xml‘); UniSession.AResponse.ContentText := st.Text; finally st.Free; end; end; if Params.Values[‘RES‘]=‘xmlTop10Customer‘ then begin try st := TStringList.Create; st.LoadFromFile(ExtractFilePath(Application.ExeName)+‘dataxmlTop10Customer.xml‘);//可以修改为实时生成的报表支持的xml格式的文本也行 UniSession.AResponse.ContentText := st.Text; finally st.Free; end; end; end; end; procedure TMainForm.UniFormCreate(Sender: TObject); begin Self.ReplaceTags; end; initialization RegisterAppFormClass(TMainForm); end. --------------------- 作者:shuiying 来源:CSDN 原文:https://blog.csdn.net/shuiying/article/details/49948667 版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于UniGui中使用Grid++Report报表控件子报表获取数据的方法的主要内容,如果未能解决你的问题,请参考以下文章