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. 微信小程序获取二维码参数

    var scene = decodeURIComponent(options.scene)

  2. myhaits if test判断字符串

    判断参数是否为字符串0 <if test='Type=="0"'><!-- 注意单双引号 --> <include refid="selec ...

  3. 编写程序,使用while循环将50到100的整数相加

    #include<iostream> int main(int argc, char const *argv[]) { using std::cout; ,b=; ){ a++; b=+b ...

  4. 解决time_wait过多

    需要真正找出问题或瓶颈,但调整单机参数能临时解决:(收集自:https://www.cnblogs.com/dadonggg/p/8778318.html) 编辑内核文件/etc/sysctl.con ...

  5. vue的表单输入绑定

    1.单行绑定 <p>{{logintype}}</p> <input type="text" v-model="logintype" ...

  6. stark组件开发之组合搜索实现思路

    - 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q()  函数. 来实现.  搜索是一个大的问题点. -  要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...

  7. Oracle通过SCN做增量备份修复DG

    DG由于网络原因或者bug原因经常不同步,有时隔得时间久了,就会丢失归档日志,或者长时间的归档恢复较慢,有一种可以基于scn的方式来恢复DG库,使用基于scn的增量备份来恢复standby库可以节省大 ...

  8. optional install error: Package require os(darwin) not compatible with your platform(win32)

    解决方法: cnpm rebuild node-sass cnpm install

  9. Numpy 数组属性

    Numpy 数组的维数称为秩(rank),一维数组的秩为 1 , 二维数组的秩为 2 , 以此类推:在Numpy中, 每一个线性的数组称为是一个轴(axis),也就是维度(dimensios).比如说 ...

  10. cerr与cout区别

    语言:C++ 一.简介 平常常会用的主要有三个:cout.cerr.clog,首先简单介绍下三者. 这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论): cout:写到标准 ...