最近在做的一个PO管理系统,因为要用到订单打印,没有用水晶报表,直接使用VS2010的Reporting.参考了网上的一些文章,但因为找到的数据是用于WebForm的,适配到WinForm有点区别,竟然花了很久才搞通.所以现在做个Step By Step以记录.

参考Jimmy.Yang的博文:

http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html

开发环境:      VS2010 C#

第一步,新建项目

2.在项目中新建数据集

3.在数据集DataSet按图标新建表T_DEPT,T_EMP.

4.在项目中新建报表rptDEPT

5.在报表rptDEPT.rdlc中新增一个Tablix表,选择显示DEPTNO,DEPTNAME.

6. 在Form1里新建一个ReportViewer1.

并填上如下代码

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;

using Microsoft.Reporting.WinForms;

namespace WinFormSubReport2

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            this.reportViewer1.LocalReport.ReportPath = @"..\..\rptDEPT.rdlc";

            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetDEPT",GetDeptData()));

            this.reportViewer1.RefreshReport();

        }

        private DataTable GetDeptData()

        {

            DataTable dt = new DataTable();

            dt.Columns.Add("DEPTNO", typeof(string));

            dt.Columns.Add("DEPTNAME", typeof(string));

            dt.Rows.Add("01", "办公室");

            dt.Rows.Add("02", "技术部");

            dt.Rows.Add("03", "销售部");

            dt.Rows.Add("04", "客服部");

            return dt;

        }

    }

}

  

然后运行结果显示如下:

以上完成了一个单报表的制作,下面演示子报表的添加.

7.在项目中新建一个rptEMP.rdlc.

在子报表中增加表和字段

在父报表中添加子报表控件

在子报表控件上点击右键,选择属性,将rptEMP设置为子报表.

 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; using Microsoft.Reporting.WinForms; namespace WinFormSubReport2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
this.reportViewer1.LocalReport.ReportPath = @"..\..\rptDEPT.rdlc";
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetDEPT",GetDeptData())); //定義子報表處理方法
this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); this.reportViewer1.RefreshReport();
}
private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
e.DataSources.Add(new ReportDataSource("DataSetEMP", GetEmpData()));
}
private DataTable GetDeptData()
{
DataTable dt = new DataTable();
dt.Columns.Add("DEPTNO", typeof(string));
dt.Columns.Add("DEPTNAME", typeof(string));
dt.Rows.Add("", "辦公室");
dt.Rows.Add("", "技術部");
dt.Rows.Add("", "銷售部");
dt.Rows.Add("", "客服部"); return dt;
}
private DataTable GetEmpData()
{
DataTable dt = new DataTable();
dt.Columns.Add("EMPNO", typeof(string));
dt.Columns.Add("EMPNAME", typeof(string));
dt.Columns.Add("DEPTNO", typeof(string));
dt.Rows.Add("", "楊過", "");
dt.Rows.Add("", "令狐沖", "");
dt.Rows.Add("", "風清揚", "");
dt.Rows.Add("", "郭靖", "");
dt.Rows.Add("", "趙敏", "");
return dt;
}
}
}

此时运行程序,父报表和子报表都显示完整的数据.

8.在父报表中增加一个参数DeptNo.

选中父报表的tablix,在属性栏的Filter项里添加过滤参数

在Form1.cs代码里动态增加一个参数.

在子报表控件中增加一个[DeptNo]=[@DeptNo],作为子报表的参数

在子报表设计窗口增加报表.

最终Form1.cs代码:

 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;

 using Microsoft.Reporting.WinForms;

 namespace WinFormSubReport2

 {

     public partial class Form1 : Form

     {

         public Form1()

         {

             InitializeComponent();

         }

         private void Form1_Load(object sender, EventArgs e)

         {

             //指定父报表文件

             this.reportViewer1.LocalReport.ReportPath = @"..\..\rptDEPT.rdlc";

             //给父报表传参数

             this.reportViewer1.LocalReport.SetParameters(new ReportParameter("DeptNo", ""));

             //给父报表传数据

             this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetDEPT",GetDeptData()));

             //定义子报表处理方法

             this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);

             this.reportViewer1.RefreshReport();

         }

         private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)

         {

             e.DataSources.Add(new ReportDataSource("DataSetEMP", GetEmpData()));

         }

         private DataTable GetDeptData()

         {

             DataTable dt = new DataTable();

             dt.Columns.Add("DEPTNO", typeof(string));

             dt.Columns.Add("DEPTNAME", typeof(string));

             dt.Rows.Add("", "办公室");

             dt.Rows.Add("", "技术部");

             dt.Rows.Add("", "销售部");

             dt.Rows.Add("", "客服部");

             return dt;

         }

         private DataTable GetEmpData()

         {

             DataTable dt = new DataTable();

             dt.Columns.Add("EMPNO", typeof(string));

             dt.Columns.Add("EMPNAME", typeof(string));

             dt.Columns.Add("DEPTNO", typeof(string));

             dt.Rows.Add("", "杨过", "");

             dt.Rows.Add("", "令狐冲", "");

             dt.Rows.Add("", "风清扬", "");

             dt.Rows.Add("", "郭靖", "");

             dt.Rows.Add("", "赵敏", "");

             return dt;

         }

     }

 }

运行结果如下:

再次感謝Jimmy.Yang的分享,此篇博文完全仿照他的博客,只是轉移到了WinForm,因為自己在用的時候走了一些彎路,希望記下來幫助記憶。

WinForm RDLC SubReport Step by step的更多相关文章

  1. WPF Step By Step 控件介绍

    WPF Step By Step 控件介绍 回顾 上一篇,我们主要讨论了WPF的几个重点的基本知识的介绍,本篇,我们将会简单的介绍几个基本控件的简单用法,本文会举几个项目中的具体的例子,结合这些 例子 ...

  2. WPF Step By Step 系列 - 开篇 ·

    WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...

  3. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  4. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  5. Step by step Install a Local Report Server and Remote Report Server Database

    原创地址:http://www.cnblogs.com/jfzhu/p/4012097.html 转载请注明出处 前面的文章<Step by step SQL Server 2012的安装 &g ...

  6. Step by step Dynamics CRM 2013安装

    原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处   SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...

  7. Step by step 活动目录中添加一个子域

    原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...

  8. SQL Server 维护计划实现数据库备份(Step by Step)(转)

    SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server  ...

  9. 转:eclipse以及step into step over step return的区别

    首先来讲一下step into step over step return的区别: step into就是单步执行,遇到子函数就进入并且继续单步执行:(F5) step over是在单步执行时,在函数 ...

随机推荐

  1. Spring项目的建立-移植流程(非入门教程)

    Creat by Zhou yong in 2016/4/15/19:00 jar包 java 1.7 tomcat的两个jar包 2个文件上传的jar包 json支持的jar包 hibernate- ...

  2. Code Complete阅读笔记(一)

    代码大全也读了好几个月了,一开始读中文版,到现在慢慢尝试着读原版,确实感受到了"每天进步一点点"的魅力.遗憾的是没有从一开始就做阅读记录,总有不能尽兴和思路不清之感.确实,就像项目 ...

  3. eclipse中多个工程编译到同一个目录下

    1.点击link source  2.选择Java(ps:Java文件目录)或者resource(ps:配置文件目录)  3.最后结果,然后使用project中的clean进行编译,就可以把两个工程编 ...

  4. poj1716 Integer Intervals(差分约束)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Integer Intervals Time Limit: 1000MS   Me ...

  5. 我的开源框架之Accordion控件

    需求: (1)实现手风琴面板控件,支持静态HTML与JSON方式创建控件 (2)支持远程加载数据 (3)支持面板激活.远程加载事件注册 (4)支持动态添加.删除项目 实现图例 客户代码 <div ...

  6. ZendFramework2 源码分析 init_autoloader.php

    // Composer autoloading if (file_exists('vendor/autoload.php')) { // 加载自动加载器 $loader = include 'vend ...

  7. 禁用ubuntu的触摸板和独显

    #!/bin/bash #This is a vgaoff & touchpadoff #By spinestars #-2-18#TouchPad & VGA OFF == ];th ...

  8. 继续Python爬虫

    先贴上代码 # coding:utf-8 import urllib2 import urllib import re gjc = urllib.quote('你好') url = 'http://s ...

  9. POJ Find The Multiple 1426 (搜索)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22576   Accepted: 929 ...

  10. 利用7z实现一键解压

    目的: 实现双击zip,7z,rar等文件时自动解压,解压完毕后自动打开文件夹. 工具: [本文末尾附有所有工具的下载地址] 7z.exe types 步骤: 新建"7z-自动解压" ...