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-26 23:53:00

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

RDLC 报表系列(二) 报表中插入图片

一.写作前提 原本的计划把在RDLC报表中插入图片的内容放到后期来讲,但是看到顶贴的朋友们对此内容的需求,所以我改变原来计划,把此节内容 提前来讲,希望能及时的给予你帮助. 二.本文内容 1. 在RDLC报表中插入图片 2. 总结 三.在RDLC报表中插入图片 首先我要声明,此篇我们是在([原创] RDLC 报表系列(一) 创建一个报表)文章的基础上来讲,如果还不了解的可以先看这篇文章. 下面我们就来谈一下怎么加入图片到RDLC报表中. 1. 首先我们在项目文件中新建一个images文件夹,他用

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

一.写作前提 前面几篇中我讲了如何去实现一个RDLC报表.插入图片.参数传递及常用表达式的使用.这一节我们将focus on子报表的使用.假设有 一天,你的老板和你说,公司需要做所有员工的出出差记录,这时子报表的应用是一个不错的选择. 关于怎样创建一个RDLC报表等相关内容,前查看我之前的文章,这里就不在阐述了. 二.本文内容 1.RDLC报表模板的设计 2.Base的修改 3.调用生成报表 4.总结 三.RDLC报表模板设计 本篇要做的是一个含有子报表的报表,所以,最少我们需要两个报表模板,一

RDLC系列之四 常见错误

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

ASP.net控件开发系列之二

"生死有序" "装装孙子" 上篇文章<开篇>说了不少空洞的理论,这篇文章我还是先说说"大而化之"的东西:1.ASP.net控件(包括页面本身)的生命期的细节:2.如何开始一个控件的编写. "生死有序" ASP.net处理程序在接收到一个用户的页面请求后,它是如何变戏法把一个鲜活的页面呈现给客户端的呢?它都做了哪些事?按什么顺序做的? 要说明这个问题,我们首先要明白,一个页面它本身也是一个Control.从设计模式的

ireport用xml作为数据源传参到子报表时,找不到匹配参数

问题描述 ireport用xml作为数据源传参到子报表时,找不到匹配参数 在使用ireport(5.6)是制作子报表与父报表连接时.一直找不到解决xml为数据也参数传递的问题,多为sql语言.在使用XPath的情况下换搜不到该参数(|| 不知道怎么搜),而换另外的(如:sql)又会报错,不能read fields.请大家帮忙解答 解决方案 http://blog.csdn.net/liunian02050328/article/details/38893059 解决方案二: 不好意思,初学者,追

切换 子报表 重新加载

问题描述 水晶报表2008,B/S子表表的数据都是主报表算出来的,不需要访问后台.但是打开子报表的时候还是会重新加载整个报表页面,主.子报表,子.子报表之间切换也会重新加载.有没有控制的地方,至少主.子报表,子.子报表之间切换的时候不要重新加载了. 解决方案 解决方案二:你是怎么打开子报表的?解决方案三:就是普通的在报表中插入子报表.子报表连接中,将数据直接传给子报表.

请教关于水晶报表子报表分页问题?

问题描述 目前存在问题如下:一张合同报表,含子报表.子报表内容为合同明细.现在问题是当合同明细超出一页显示的时候,希望它能够连带主报表所有的内容进行分页,不知道能不能实现?例:希望得到的效果合同*****编号****日期*****1.**************|2.**************|明(子报表)3.**************|4.**************|细5.**************|买方***卖方******------------------PAGE1合同*****

深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)

深入浅出Mybatis系列(二)---配置简介(mybatis源码篇) 上篇文章<深入浅出Mybatis系列(一)---Mybatis入门>, 写了一个Demo简单体现了一下Mybatis的流程.本次,将简单介绍一下Mybatis的配置文件: 上次例子中,我们以 SqlSessionFactoryBuilder 去创建 SqlSessionFactory,  那么,我们就先从SqlSessionFactoryBuilder入手, 咱们先看看源码是怎么实现的: SqlSessionFactory

水晶报表 子报表打印的时候多出了一个边框的问题! 急用

问题描述 在打印子报表的时候,如果直接打印的时候,打印出来所有报表都有个边框!请问下在那里设置打印子报表的时候,不要那个外边框呢? 解决方案 解决方案二:该回复于2008-06-30 09:26:34被版主删除解决方案三:可以在主报表的属性中删除外框的黑色就行啦,子报表也相同.看你的需求而定设置!解决方案四:程序用的什么代码?去掉框线不就行了,网上有很多例子