RDLC系列之二 子报表

本文实现简单的子报表

一、效果图

二、步骤

1.项目下新添加报表SubReport.rdlc,在主报表中添加子报表:右键=》插入=》子报表

2.(可选)传参给子报表

a.在主报表的子报表控件上设置参数

b.在子报表上添加参数

则子报表即可使用该参数

3.为子报表添加数据

添加SubDataSet.xsd,新建表,添加字段address、字段zipcode

在子报表中,指定数据集,并设计界面

添加后台代码(全部代码)

using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RdlcDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //为子报表添加事件
            this.reportViewer1.LocalReport.SubreportProcessing += new Microsoft.Reporting.WinForms.SubreportProcessingEventHandler(SubReportProcessingEventHandler);

            //自定义数据源
            DataTable dt = GetData();

            //自定义参数
            List<ReportParameter> list = new List<ReportParameter>();
            ReportParameter rp = new ReportParameter("pid", "11");
            list.Add(rp);

            this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\Report1.rdlc";
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dt));//指定数据源
            this.reportViewer1.LocalReport.SetParameters(list); //参数设置
            this.reportViewer1.RefreshReport();
        }

        private void SubReportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
        {
            //为子报表统计数据
            e.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", GetSubData()));
        }
        /// <summary>
        /// 获取主表数据
        /// </summary>
        /// <returns></returns>
        DataTable GetData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            DataRow dr = null;
            dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "li";
            dt.Rows.Add(dr);

            return dt;
        }
        /// <summary>
        /// 获取子表数据
        /// </summary>
        /// <returns></returns>
        DataTable GetSubData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("address", typeof(string));
            dt.Columns.Add("zipcode", typeof(string));
            DataRow dr = null;
            dr = dt.NewRow();
            dr[0] = "福建省厦门市";
            dr[1] = "361000";
            dt.Rows.Add(dr);

            return dt;
        }
    }
}

思路拓展:

1.标签打印

场景:需要批量打印标签(标签需定义特定格式),每标签为每行数据的几个属性

解决方案:

在主报表的table使用子报表,传递参数到子报表;

在主报表进行分组,即根据唯一属性分组(为了实现每页只显示一个子报表)

时间: 2024-10-10 23:46:36

RDLC系列之二 子报表的相关文章

VS2012报表(RDLC)系列应用之单据批量打印

一.前言 最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现.经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs2005的版本,有质的提升,不过仍有一下几点缺憾: 1.内置函数不支持C#,只支持Visual Basic 2.不支持Asp.net MVC,支持webForm和winForm 3.VS2008及以下版本开发WebForm时,不建议使用RDLC,因为生成的报表样式不兼容chrome浏览器. 如果未来时间充裕,我将会把RDLC一系列应

关于RDLC子报表添加参数 错误“本地报表处理期间出错 。值不能为空。 参数名:value” 错误解决方法

由于对RDLC报表不够熟悉,在出现这个错误时,也是找了一阵才找到解决方案1.首先在网上找了一堆方法后  这句话提醒了我  自定义的名称必须和子报表参数同名 2.然后我仔细比对了一下我的报表和子报表 下图为父报表的子报表参数(此处没有问题) 3.然后我在回到子报表  检查子报表中是否有同名的参数和数据集,并设置参数可为空 (注意: 查询的SQL 必须也要有这个字段) 4. 最后一点很重要,属性, 在筛选器中填写表达式  注意 表达式和值不一样 这样基本就OK了!

创建RDLC子报表

一.创建步骤? 1.建立主报表? 2.建立子报表?,添加参数,用于接受主报表关联字段的值. 3.在主报表中插入"子报表"控件,设置子报表的"常规"和"参数"属性."常规"属性用于设定子报表的名称,"参数"属性用于将子报表与主报表通过子报表的参数.主报表的关联字段将二者关联起来.? 4.在后台代码中为主报表指定ReportDataSource? 5.在后台代码中注册(也称为订阅)子报表事件? 6.在子报表事件

[Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建一个web service .  但是对于如何部署及调用,以及一些细节的部分基本上没有介绍. 应某些博友的要求, 也适逢自己有空, 接下来就详细介绍一下整个部分如何进行. 环境准备 JDK 肯定要安装了, 这个就不多讲了. 1. eclipse  3.5.2 对eclipse 版本的要求其实不是很严

企业内部IT一体化系列之二:系统角色

继续上一章的内容,这章主要将整个系统中每个角色详细讲解一下: SharePoint结构: 由于我在做这个项目的时候,所有的系统要求都是高可用,且公司人员基数也大,所有服务器都是高可用的结构,总过7台服务器,三层结构.两台WEB前端服务器,提供IIS服务,两台APP服务器,重要跑SharePoint的各种应用和服务,比如搜索服务,用户配置同步服务等.两台数据库服务器提供一个数据库群集,一台单独数据库服务器提供报表服务,因为report服务不支持群集.如下图: Operation Manager即S

小白C#窗体系列-02.二维码生成器

今天是情人节,咳,男人们带着他们的男朋友们,女人带着她们的女朋友们愉快的逛着街.逆天也就不随大众了,就继续出C#小白系列的教程了~~~ 实在没空去录教程了,就看看文档吧,大家都知道的,录教程是比较花时间的,我不想草草了事,那是对大家和我自己的不负责,视频可以以后再录,不过软件和源码以及文档得先弄好,毕竟逆天不喜欢失信与自己~~ 废话不说了,开始我们的教程吧~ 软件下载(.NET 4.0 框架)http://pan.baidu.com/s/1i3BUVNv[源码看下面] 一.设计图纸: 二.代码分

solr与.net系列课程(二)solr的配置文件及其含义

 solr与.net系列课程(二)solr的配置文件及其含义  本节内容还是不会涉及到.net与数据库的内容,但是不要着急,这都是学时solr必学要掌握的东西,solr可不是像其他的dll文件一样,只需要引用就能调出方法与数据的,你不配置好是无法使用,前两节主要是起铺垫作用的,看起来会很枯燥无味的. 本章节内容是为下一节连接数据库做准备的,单拿出来看的话,会让人很迷糊,没关系,就当提前预习了,知道有这么个东西就行了,等下一节结合数据库后就好理解了 上一节我们已经完成了solr的基本配置,这里我们

JuheNews系列之二 &#183; ToolBar+AppBarLayout+CoordinatorLayout+CollapsingToolbarLayout+NestedScrollView

JuheNews系列之二 · ToolBar+AppBarLayout+CoordinatorLayout+CollapsingToolbarLayout Android5.0重要的改变之一,除了Material Design风格的设计思想,应该就是沉浸式状态栏了吧.之前实现沉浸式的效果时,都是借助SystemBarTint来实现,或许以后你也可以丢弃这种方式了. 除此之外,由于actionbar不够灵活,项目中我一般喜欢把Activity的ActionBar去掉,然后自己在布局中写一个公用的H

RDLC系列之四 常见错误

解决 RDLC 报表自动分页表头显示问题 原文:http://www.th7.cn/Program/net/201207/85445.shtml RDLC是用XML来描述一个报表相关的一切,只需要在<TablixMember>节点添加<RepeatOnNewPage>true</RepeatOnNewPage>子节点就可以,并设定值为true. 有些朋友在VS环境中无法打开XML编辑方式,这里我提示一下,你可以去工程目录下用记事本打开扩展名为RDLC的文件,也可以直接在