Grid++Report是为优秀的报表控件,子报表是其重要功能之一,但Grid++Report提供的网页报表示范主要是以页面为主的,UniGui在Delphi中以快速编写web管理软件著称,但由于资料文档很少,经过摸索,Grid++Report的子报表要在uniGUi中正确获取子报表数据,只能通过Ajax数据回调的方式进行,在uniGUi中对前端Ajax的响应,就要是通过控件的AjaxEvent事件来处理。报表模板的展示部分的HTML代码要放在UniURLFrame控件的HTML属性中。
AjaxEvent事件函数如下:
Web报表(B/S报表)演示 - 子报表,子报表模板集成定义
---------------------
作者:shuiying
来源:CSDN
原文:https://www.sychzs.cn/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
www.sychzs.cn;
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
www.sychzs.cn;
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
www.sychzs.cn;
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
www.sychzs.cn;
end;
end;
end;
end;
procedure TMainForm.UniFormCreate(Sender: TObject);
begin
Self.ReplaceTags;
end;
initialization
RegisterAppFormClass(TMainForm);
end.
---------------------
作者:shuiying
来源:CSDN
原文:https://www.sychzs.cn/shuiying/article/details/49948667
版权声明:本文为博主原创文章,转载请附上博文链接!
-->