RDLC系列之二 子报表

简介: 本文实现简单的子报表  一、效果图   二、步骤 1.项目下新添加报表SubReport.rdlc,在主报表中添加子报表:右键=》插入=》子报表 2.(可选)传参给子报表 a.在主报表的子报表控件上设置参数 b.

本文实现简单的子报表

 一、效果图

 

二、步骤

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使用子报表,传递参数到子报表;

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

 

相关文章
|
BI C# C++
C# 机房重构——VS2017中没有报表控件(ReportView)
C# 机房重构——VS2017中没有报表控件(ReportView)
220 0
|
4月前
|
SQL 开发框架 前端开发
在Winform系统开发中,对表格列表中的内容进行分组展示
在Winform系统开发中,对表格列表中的内容进行分组展示
|
XML BI 数据格式
将RDL报表转换成RDLC报表的函数
原文:将RDL报表转换成RDLC报表的函数 近日研究RDLC报表,发现其不能与RDL报表兼容,尤其是将RDL报表转换成RDLC报表。
926 0
|
BI 开发框架 自然语言处理