RDL(C) Report Design Step by Step 2: SubReport

iReport专题学习之子报表(SubReport) 07 一、SubReport简介 阅读详情

RDL(C) Report Design Step by Step 2: SubReport


    前两天,有网友在Blog上评论要求将子报表的配置贴出来,由于这两天有些别的事情,所以耽搁了;另外,自己也比较懒,有些东西明明应该早就写出来的。呵呵,说声“对不起”,然后还有“谢谢你”!

    OK,这篇随笔就讲一下RDLC报表中子报表SubReport的实现步骤。

    首先来看一下,本文的示例的运行结果。


图1 主子报表示例运行结果

    主子报表的数据源显然也应该是两个具有主子关系的数据表,本文示例依然使用Northwind数据库的订单和订单明细表作为数据源。

    1、在Visual Studio 2005中创建一个Windows应用程序RDLCSR。

    2、在项目中添加数据源,数据源并不一定用来为报表提供数据(当然Visual Studio 2005提供的操作非常方便),主要是在报表设计时可以方便向报表中进行字段拖曳。添加数据源意味着在项目中添加了一个数据集Orders.xsd文件,当报表的数据不是来源于关系型数据库(如Flat Files或Web Services等)时,我们可以自己定义一个xsd文件作为报表设计时的数据源,而在程序中重新为报表载入数据。

    3、在项目中添加报表rptOrder.rdlc和rptOrderDetail.rdlc分别作为示例的主报表和子报表。

    4、为子报表rptOrderDetail.rdlc添加参数pOrderId,指定其数据类型为Integer,然后如图2进行子报表的布局设计。


图2 子报表rptOrderDetail.rdlc布局设计

    5、为主报表rptOrder.rdlc进行如图3所示的布局设计。


图3 主报表rptOrder.rdlc布局设计

    6、在主报表rptOrder.rdlc的子报表控件上单击右键,使用“属性”菜单调出“子报表属性”对话框。在“常规”选项卡中的子报表下拉列表中选择rptOrderDetail;切换到“参数”选项卡,在“参数名称”列中,系统会自动检测到步骤4中定义的子报表的参数pOrderId,并在“参数值”列中指定参数值为=Fields!订单ID.Value。

    7、在子报表rptOrderDetail.rdlc中选择表格控件,使用右键菜单“属性”调出“表属性”对话框,在“筛选器”选项卡中进行入图4的设置。这主要是为了在订单明细中筛选当前订单的明细数据,当然这一步骤可以在程序中用代码指定。


图4 在子报表rptOrderDetail.rdlc中指定筛选器

    好了,至此报表布局的设置已经完成了,下面需要在应用程序中显示报表并给主子报表分别提供数据。

    8、在窗体frmMain中添加ReportViewer控件rptMain,并在rptMain的“ReportViewer任务”中选择报表rptOrder.rdlc。

    9、在窗体frmMain中添加图5所示的代码:


图5 窗体frmMain的代码

    可见,必须对ReportViewer控件的LocalReport对象添加SubReportProcessing事件,而该事件主要也就是为了子报表提供数据。

    现在就可以运行应用程序查看结果了,如图6所示。


图6 示例运行结果(未给列表指定分组)

    在图6中,我们看到出现两个订单显示在同一页面,而在实际应用中,我们可能希望,每个页面

上只显示一条订单。此时,可以进行以下的设置:

    10、在主报表rptOrder.rdlc中,选择列表控件,右键“属性”弹出“列表属性”对话框,在“常规”选项卡中,单击按钮“编辑详细信息组”弹出“分组和排序属性对话框”并进行如图7所示的设置。


图7 为列表指定分组并设置分页显示选项

    事实上,主子报表和钻取报表有着相似的地方,所以如果看了这篇随笔有什么不明白的地方,可以参看一下我的另一篇随笔RDLC Report Step by Step 1: DrillThrough Report。

    Demo下载

【JasperReports笔记06】JasperReport报表开发之常见的组件元素(Table、Subreport、Barcode等) TextField是一个基础组件,它表示的是一个文本域,可以设置一个表达式对象,例如:Parameters、Fields等,也就是说,TextField文本域组件可以在程序运行过程中,动态的显示文本内容。StaticText是Jasper中的一个基础组件,用于表示静态文本内容,它表示的内容在程序运行过程中是不可以改变的,在制作模板文件的时候,就已经固定了文本内容。Subreport是子报表组件,它可以在一张报表中嵌入另一个报表,从而实现父子报表的功能,父子报表我在之前的文章中有介绍了,可以看下这篇文章【 阅读详情

相关推荐

子报表设计与应用实例教程

子报表是报表系统中的一个组件,它可以包含并展示数据,但通常这些数据是基于主报表中的选择或数据。子报表的设计允许在复杂的报表中创建层级和数据展示的模块化,同时能够提高报表整体的可读性和维护性。数据关联是数据库设计中的一个基本概念,它描述了两个或多个数据表中的数据通过共同的字段建立逻辑联系的过程。这种关联通常体现在数据表之间的“主键-外键”关系中。数据关联的重要性体现在以下几个方面:完整的数据视图:通过关联可以将分散在不同数据表中的信息整合到一起,为用户提供全面的数据视图。提高查询效率。

weixin_42576410的博客 815

Jasperreports+jaspersoft studio学习教程(八)- 子报表Subreport(父子报表互相传值)

有很多人都说Jasperreports不适合中国式复杂报表,实际上运用好父子报表可以解决大部分问题了。例如下面的表。每个学生的学科数目不固定,且每个学生后有相当于小计的平均分。有点复杂度的报表,可以使用子报表解决。 8.1 设计报表模板 8.1.1 新建主模板DemoReport6_main.jrxml,创建Paramters :title(java.lang.

ZeWe的博客 1万+

掌握RDLC报表和子报表的实例操作指南

RDLC(Report Definition Language Client-side)是微软报表解决方案的一部分,主要用于在客户端进行报表的定义和展示。RDLC报表是在Visual Studio中设计,然后在客户端呈现,它的布局和数据绑定都在客户端进行处理,使得它可以非常灵活地适应各种数据展示需求。子报表允许开发者将一个复杂的报表分解成多个更小、更易于管理的部分。这种模块化的设计方式,使得整个报表不仅更加清晰,还便于维护和更新。子报表可以实现数据的分层展示,使用户能够逐步深入到细节数据。

weixin_31459297的博客 1094

【JasperReports笔记06】JasperReport报表开发之常见的组件元素(Table、Subreport、Barcode等)-支持Android

TextField是一个基础组件,它表示的是一个文本域,可以设置一个表达式对象,例如:Parameters、Fields等,也就是说,TextField文本域组件可以在程序运行过程中,动态的显示文本内容。StaticText是Jasper中的一个基础组件,用于表示静态文本内容,它表示的内容在程序运行过程中是不可以改变的,在制作模板文件的时候,就已经固定了文本内容。Subreport是子报表组件,它可以在一张报表中嵌入另一个报表,从而实现父子报表的功能,父子报表我在之前的文章中有介绍了,可以看下这篇文章【

空名先生 3246

C# rdlc报表嵌套子报表

winform中使用rdlc报表, rdlc报表的显示 rdlc报表子报表的显示

华为数通---配置风暴控制案例

风暴控制可以通过阻塞报文或关闭端口来阻断广播、未知组播和未知单播报文的流量。

2301_77081516的博客 1624

[导入]RDL(C) Report Design Step by Step 2: SubReport

摘要: 这篇随笔主要讲一下RDLC报表中子报表SubReport的实现步骤。阅读全文蜡人张 2006-07-24 16:23 发表评论文章来源:http://www.cnblogs.com/waxdoll/archive/2006/07/24/458409.html 转载于:https://www.cnblogs.com/twttafku/archive/2008/03/12/110...

weixin_30437847的博客 96

基于PLC的立体车库控制系统设计

本文介绍了基于西门子S7-1511-1PN PLC和KTP700 Basic PN HMI的立体堆垛式停车场自动化控制系统。系统通过PLC逻辑控制滑台运动,配合传感器实现车辆存取自动化,包含初始化、入库、出库和安全保护程序。程序采用模块化设计,分为安全互锁、动画显示、模式切换等六个功能模块,运用边沿触发、定时器和多级联锁确保安全。HMI界面提供模式切换、车位选择、状态显示和手动控制功能。该系统具有模块化、安全性和可扩展性特点,可应用于多车位立体停车场场景。

sxs3030787796的博客 1263

【转】RDL(C) Report Design Step by Step 2: SubReport

前两天,有网友在Blog上评论要求将子报表的配置贴出来,由于这两天有些别的事情,所以耽搁了;另外,自己也比较懒,有些东西明明应该早就写出来的。呵呵,说声“对不起”,然后还有“谢谢你”! OK,这篇随笔就讲一下RDLC报表中子报表SubReport的实现步骤。 首先来看一下,本文的示例的运行结果。图1 主子报表示例运行结果 主子报表的数据源显然也应该是两个具有主子关系的数据...

weixin_30732487的博客 101

GPU计算板卡设计原理图:735-基于3U VPX的AGX Xavier GPU计算主板

基于3U VPX的 Jetson AGX Xavier GPU计算主板是LINUX环境下软件开发等理想工具。是用于视频处理,相机信号,支持PCIE、USB、RS422、RS232、网口、SPI、I2C等综合性的信号计算主板。3. 支持外接HDMI连接显示器,并支持键盘,鼠标等外接设备进行调试。8 核 ARM v8.2 64 位 CPU、8 MB L2 + 4 MB L3。4路Gigabit Ethernet (10/100/100)link。1路RS232,1路RS485。1路 NVMe PCIeX4。

980

构建.NET网站:VSCode还是Visual Studio?揭开开发工具的选择之谜

选择VSCode还是Visual Studio,归根结底是取决于你的具体需求和偏好。🔍 这两款工具各有千秋,都能为你的.NET网站开发提供强大的支持。希望这篇文章能够帮助你更全面地了解这两款工具,做出明智的选择。

墨夶的博客 788

JasperReports Subreport 实例

 公司的项目需要将数据导出为excel和pdf,之前用过vba和poi,这次要使用jasper reports,期间遇到一个关于subreport的问题,现已解决,放出给大家参考。首先说明一下,subreport是iReport template编辑器中的一个概念,相当于主从关系,比如有主列表里面是国家名称,在每个国家名称下,会有不同的城市名称。这里仅演示二级从属关系,按需求可以再使用subreport扩展为多层关系。这是效果图:开始贴代码:subreport.jrxml(主表)

usedtolove的专栏 8588

如何在 UniApp 中接入讯飞语音听写功能 文末附vue3+vue2完整代码

在开发过程中,我遇到了讯飞接口返回空数据的问题。通过仔细检查传送的每一帧数据,我发现问题出在第一帧的配置信息以及 Base64 数据的切片。确保每一帧的数据正确且符合接口要求,问题就能够得到解决。希望这个过程能帮助你在项目中顺利对接讯飞语音识别。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 997

七、Subreport子报表

七、Subreport子报表 难点 父报表往子报表传送参数 父报表接受子报表的返回值 实例:父报表传递年级参数给子报表查询,子报表统计好各个班级人数并返回给父报表人数统计 数据 年级数据 班级数据 父报表 新建模板 选择字段 报表设计 预览 子报表 新建报表(方式有两种) 子报表SQL 字段选择 数据源的选择(可多数据源) 报表设计 预览 父报表传递参数给子报表 报表初步设计和预览(各自独立) 父报表传递参数给子报表

一个孤独漫步者的遐想的博客 657

YOLO11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

YOLOv11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

魔改工程师的博客 4523

影楼精修-AI追色算法解析

本文解析了像素蛋糕软件中AI追色功能的技术原理与实现方案,为理解AI追色技术提供了实用参考。

Trent1985的专栏 2万+

RDLC子报表

一个报表,显示主记录与相关的子记录,使用RDLC,经两个多小时的摸索,总算是搞出个DEMO,赶紧记下来,以备以后查看。步骤1:建立一个报表,在报表中加入“列表”控件,在列表中加入文本框,将主记录数据源绑定到文本框中,示例中有一个“姓名”字段,主表与子表靠这个字段来关联。步骤2:在列表中插入一个“子报表”控件,新建一个报表,将此子报表控件的子报表属性选择为新建的这个报表。步骤3:在子报表

6901

YOLOv8多传感器融合技术——毫米波雷达融合技术详解

本文介绍了YOLOv8与毫米波雷达融合技术在自动驾驶系统中的应用。毫米波雷达具有全天候工作、测距测速精准等优势,但存在分辨率低等局限。通过融合YOLOv8的视觉检测能力,可显著提升系统在恶劣环境下的感知性能。文章详细阐述了融合实现方法,包括雷达数据处理、目标投影匹配、置信度融合等关键技术,并提供了评估指标和应用场景分析。这种多传感器融合方案能有效弥补单一传感器的不足,为自动驾驶提供更可靠的环境感知能力,是实现高级别自动驾驶的重要技术支撑。

u010117029的博客 175

Jaspersoft Studio报表设计

DW_July 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

rdlc子报表

子报表参数通过主报表数据集设置,当改动参数时子报表参数已改变但是没有应用到相关控件上。

csdnlalala的博客 264

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RDLC 报表系列(四) 子报表的使用

本文只代表作者在一定阶段的认识与理解 一.写作前提 前面几篇中我讲了如何去实现一个RDLC报表、插入图片、参数传递及常用表达式的使用。这一节我们将focus on子报表的使用。假设有一天,你的老板和你说,公司需要做所有员工的出出差记录,这时子报表的应用是一个不错的选择。          关于怎样创建一个RDLC报表等相关内容,前查看我之前的文章,这里就不在阐述了。 [原创] RDLC 报

贝爷的博客 6538

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JAVA报表开发JasperReport+iReport5.6详解

课程包含从基础的环境搭建,到控件的详细使用和对ireport难点进行重点讲解,一共21个小节。难点包含:条件stylesCrosstab交叉表格报表分组和统计Subreport子报表(参数传递,子报表返回值)chart图表类所有控件jasperreport导出word,excel,pdf多数据源报表JSP中显示jasperreport报表等

上一篇: RDL(C) Report Design Step by Step 1: DrillThrough Report
下一篇: RDL(C) Report Design Step by Step 3: Mail Label
GoodShot
博客等级 码龄22年 968粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值