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-"/>
<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报表控件子报表获取数据的方法的更多相关文章
- 葡萄城公布新版ActiveReports 9报表控件和报表server
2014年11月10日---葡萄城宣布正式公布ActiveReports9,包含了三种报表模型:RDL报表.页面报表.区域报表.对于ActiveReports中的这个最新版本号中,我们专注于提高产品的 ...
- 市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交
http://blog.csdn.net/cjr15233661143/article/details/19041165 市委组织部考核项目中需要录入原始数据,拿开发区的数据录入举例说明,见下图,需要 ...
- 在Repeater控件的OnItemDataBound获取数据源记录总数
Insus.NEt曾经有写过一篇<Repeater控件最后一笔记录高亮显示> ,它的实现是先宣告一个页面级的变量,然后在Data_Binding()方法内获取数据源的记录总数. 本篇是的重 ...
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 但是好多使用NCReport控件的朋友都不 ...
- 在ASP.NET MVC 中使用ActiveReports报表控件
随着MVC模式的广泛运用,对Web应用系统的开发带来了巨大的影响,我们好像又回到了原来的ASP时代,视乎这是一种后退而不是一种进步,不过MVC模式给我们带来的影响不仅限于我们所看到的这一点..MVC看 ...
- Qt开发环境中使用报表控件FastReport遇到的一些问题(一)
FastReport是一款优秀的报表控件,由俄罗斯开发,国内有代理商.Qt环境下可实现报表功能的还有一款叫NCReport,也是收费控件,比较来比较去还是觉得前者功能强点.网上讲解此控件在Qt中使用的 ...
- 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件
Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...
- 机房收费系统中的Grid++Report报表设计器的应用
在进行账单查询功能的时候我应用了Grid++Report报表设计器,下面我就为大家介绍一下,还望大家多多指点. 首先,在Grid++Report报表设计器中进行报表界面的设置.在属性编辑窗口中这里对报 ...
- FastReport报表控件使用技巧总结
FastReport报表控件使用技巧总结 1.FastReport中如何访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject(' ...
随机推荐
- 25. Reverse Nodes in k-Group (JAVA)
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
- Codeforces 1083C Max Mex
Description 一棵\(N\)个节点的树, 每个节点上都有 互不相同的 \([0, ~N-1]\) 的数. 定义一条路径上的数的集合为 \(S\), 求一条路径使得 \(Mex(S)\) 最大 ...
- Ax2009中使用CLR发送邮件
由于Ax2009系统方法SysMailer 发送中文的时候会乱码,一直找不到原因,用.NEt Framwork的类库可以解决中文乱码的问题.static void CKT_DotNetMail(Arg ...
- 不在sudoer里解决办法 和 RHEL 挂载NTFS硬盘
输入su 切换到root用户 打开/etc/sudoers sudo vim sudoers 在root ALL=(ALL:ALL) ALL 下边比着写一个自己的用户名就可以了 下载 可以到ht ...
- laravel-重定向携带自定义消息
在控制器写: return redirect(route('member_create'))->with('success', '操作成功'); //指定到路由名member_create // ...
- 【Java】学习笔记(1)
Java数据类型: 基本数据类型:(变量在栈中)数值型:byte(1个字节) short(2个字节) int(四个字节) long(8个字节) ,float(4字节) double(8字节) 字符型: ...
- RNQOJ PID28 / [Stupid]愚蠢的宠物
勉勉强强够着点并查集的边,题目吧他分类到并查集也无可厚非,这里与常规的并查集的区别在于要做一个mark数组进行一下标记,展开来说就是对于要查询的A,B,先对A进行处理,把A所有的前驱也就是双亲节点进行 ...
- PCL-CMAKELIST书写格式
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)//cmake最小版本 find_package(PCL 1.3 REQUIRED COMPONENTS ...
- 配置了yum本地源
测试机不能联网 所以不能直接安装软件 只能配置本地源 1. 在联网的电脑上下载与Linux内核版本相同的镜像 2. 把此安装镜像放在此Linux测试机上 比如放在家目录下 /home/ ...
- ELK的高级篇(测试记录各种日志)
一.elk架构已经完成情况情况下 访问限制: 加个x-pack插件 1)一个脚本收集多个日志,if 判断写入es的索引 [root@k8s6 conf.d]# cat file.conf inpu ...