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-"/>
<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:" onload="window_onload()">
<script type="text/javascript">
CreatePrintViewerEx("%", "%", "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)+'data\xmlCustomer.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)+'data\xmlProductList.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)+'data\xmlTop10Product.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)+'data\xmlTop10Customer.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报表控件子报表获取数据的方法的更多相关文章

  1. 葡萄城公布新版ActiveReports 9报表控件和报表server

    2014年11月10日---葡萄城宣布正式公布ActiveReports9,包含了三种报表模型:RDL报表.页面报表.区域报表.对于ActiveReports中的这个最新版本号中,我们专注于提高产品的 ...

  2. 市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交

    http://blog.csdn.net/cjr15233661143/article/details/19041165 市委组织部考核项目中需要录入原始数据,拿开发区的数据录入举例说明,见下图,需要 ...

  3. 在Repeater控件的OnItemDataBound获取数据源记录总数

    Insus.NEt曾经有写过一篇<Repeater控件最后一笔记录高亮显示> ,它的实现是先宣告一个页面级的变量,然后在Data_Binding()方法内获取数据源的记录总数. 本篇是的重 ...

  4. 报表控件NCReport教程:集成NCReport到Qt应用程序中

    NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 但是好多使用NCReport控件的朋友都不 ...

  5. 在ASP.NET MVC 中使用ActiveReports报表控件

    随着MVC模式的广泛运用,对Web应用系统的开发带来了巨大的影响,我们好像又回到了原来的ASP时代,视乎这是一种后退而不是一种进步,不过MVC模式给我们带来的影响不仅限于我们所看到的这一点..MVC看 ...

  6. Qt开发环境中使用报表控件FastReport遇到的一些问题(一)

    FastReport是一款优秀的报表控件,由俄罗斯开发,国内有代理商.Qt环境下可实现报表功能的还有一款叫NCReport,也是收费控件,比较来比较去还是觉得前者功能强点.网上讲解此控件在Qt中使用的 ...

  7. 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件

    Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...

  8. 机房收费系统中的Grid++Report报表设计器的应用

    在进行账单查询功能的时候我应用了Grid++Report报表设计器,下面我就为大家介绍一下,还望大家多多指点. 首先,在Grid++Report报表设计器中进行报表界面的设置.在属性编辑窗口中这里对报 ...

  9. FastReport报表控件使用技巧总结

    FastReport报表控件使用技巧总结 1.FastReport中如何访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject(' ...

随机推荐

  1. aop point-cut表达式

    好多博客写的云里雾里,大多都有一点毛病.大家还是以官网为准 @官网文档 官网截图 modifiers-pattern:修饰符 ret-type-pattern:方法返回类型 declaring-typ ...

  2. mybatis generator 源码学习

    mybatis/generator 源码地址mybatis/parent 源码地址1. 分别点击Download ZIP下载到本地. 2. 解压generator-master.zip中的core到g ...

  3. 思科模拟器GNS3-2.1.8安装笔记 (适用于版本2.0.3以上的GNS3)

    当前现阶段学习经常使用的路由交换设备主要来自于思科.华为和华三三家,这三家的设备操作配置大致类似,却又不尽相同.因为实体设备通常都非常昂贵,所以作为学习,我们通常会使用它们提供的模拟器.华为的模拟器是 ...

  4. 微信x5内核很鸡贼啊

    最近在写一个支付项目,然后要打通微信和支付宝支付,本来后端联调的时候直接调用weixin://wxpay/bizpayurl?XXXX接口就行的,完全走着通,然后到项目验收了就炸了,点不进去了,最后改 ...

  5. 苹果手机input有圆角阴影的解决方法

    input[type=button], input[type=submit], input[type=file], button { cursor: pointer; -webkit-appearan ...

  6. chip8模拟器的python3实现-1-CHIP8简介

    打算编写一个NES模拟器,先从简单的chip8模拟器入手 1.CHIP-8简介 CHIP-8是一个解释型语言,由Joseph Weisbecker开发.最初CHIP-8在上个世纪70年代被使用在COS ...

  7. Qt5.12.2开发Android环境搭建

    Qt-Android开发环境概要qt-opensource-windows-x86-5.12.2----armv7jdk-8u201-windows-x64android-ndk-r18b-windo ...

  8. Qt跨平台开发Wince5.0和Android程序

    所谓跨平台是指维护一份代码,可编译出多平台的应用程序.Qt这方面虽然已经做的不错,但性能还是体验,和原生开发工具开发的程序相比,差距还是不小的.但单从生产应用的角度来说,可以采用,不失为一种好的解决方 ...

  9. Quartz.Net 定时服务

    http://www.cnblogs.com/jys509/p/4628926.html https://www.cnblogs.com/AmyLo/p/8125505.html https://bl ...

  10. import os, glob, fnmatch--Python os/glob/fnmatch主要函数总结

    auther: Lart date: 2019-01-17 update: 2019-01-18 09:55:36 --- import os, glob, fnmatch 针对某些操作, 官方推荐这 ...