UniGui中使用Grid++Report报表控件子报表获取数据的方法

时间:2022-09-12 14:12:32

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&period;NET MVC 中使用ActiveReports报表控件

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

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

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

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

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

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

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

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

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

随机推荐

  1. 【BZOJ-4514】数字配对 最大费用最大流 &plus; 质因数分解 &plus; 二分图 &plus; 贪心 &plus; 线性筛

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 726  Solved: 309[Submit][Status ...

  2. Odoo Website 替换 Summernote 为第三方富文本编辑器

    随着用odoo的人越来越多,奇葩的需求也是越来越多.... 这不,有同学就想替换掉website forum里边的summernote控件,花了点时间研究了一下,先说结论:替换是可行的. 先上替换之后 ...

  3. 163&period; Missing Ranges

    题目: Given a sorted integer array where the range of elements are [lower, upper] inclusive, return it ...

  4. hive&colon;某张表进行分页

    已知表myobject(objectid int) create table myobject(objectid int) row format delimited fields terminated ...

  5. 微服务、SOA 和 API对比与分析

    摘要: 对比微服务架构和面向服务的架构(SOA)是一个敏感的话题,常常引起激烈的争论.本文将介绍这些争论的起源,并分析如何以最佳方式解决它们.然后进一步查看这些概念如何与 API 管理概念结合使用,实 ...

  6. document&period;visibilityState 监听浏览器最小化

    document.hidden:表示页面是否隐藏的布尔值.页面隐藏包括 页面在后台标签页中 或者 浏览器最小化 (注意,页面被其他软件遮盖并不算隐藏,比如打开的 sublime 遮住了浏览器). do ...

  7. Python3 识别验证码(opencv-python)

    Python3 识别验证码(opencv-python) 一.准备工作 使用opencv做图像处理,所以需要安装下面两个库: pip3 install opencv-python pip3 insta ...

  8. React 组件间通信

    https://jsfiddle.net/69z2wepo/9719/ <script src="https://facebook.github.io/react/js/jsfiddl ...

  9. 《DSP using MATLAB》示例Example 8&period;17

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  10. Spring框架总结(七)

    Spring代理模式:名词解释: 代理是一种开发的设计模式,用途:提供了对目标对象另外的访问方式,及通过对代理访问目标对象. 优势: 可以在目标对象实现的基础上,增强额外的功能操作,(扩展目标对象的功 ...