原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表

Excel具有强大的图表显示、分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那么容易。在VSTO中,我们可以借助RDLC报表组件来满足这种需求。

示例代码下载

本系列所有示例代码均在 Visual Studio 2010 Ultimate RTM + Office 2010 Professional Plus Beta x64 下测试通过

注:本次数据库使用的是 SQL Server 2008 R2 x64 RTM

1、在VS2010中,新建一个Excel 2010 Workbook项目:

2、添加引用:

Microsoft.ReportViewer.WinForms

3、创建一个RDLC报表,添加一个报表参数p_Country:

报表的目的很简单,用的Northwind数据库,根据传递的参数,从Customers表中查询数据。

4、创建一个存储过程:

代码





AS 

SELECT * FROM dbo.Customers WHERE Country = @Country 

GO 

5、在项目中添加一个Linq to SQL Class,将Customers表和sp_LinqTest存储过程添加进来:

6、打开Sheet1的设计界面,添加一个ComboBox:

7、初始化数据:

代码

        ReportViewer rptExcel = new ReportViewer();
        private void fnDataIni()
        {
            this.rptExcel.LocalReport.ReportEmbeddedResource = "RDLCInExcel.LinqRpt.rdlc";
            Excel.Range range = this.Range["B4", "J22"];
            this.Controls.AddControl(this.rptExcel, range, "rptInExcel");

            NorthwindDataContext ctx = new NorthwindDataContext();
            var result = from c in ctx.Customers
                         select c.Country;
            foreach (string list in result.Distinct<string>().ToList<string>())
            {
                this.comCountry.Items.Add(list);
            }
        }

8、构造数据源,传递报表参数:

代码

        private void fnBuildDataSource(string v_strCountry)
        {
            NorthwindDataContext ctx = new NorthwindDataContext();
            var datasource = from c in ctx.sp_LinqTest(v_strCountry)
                             orderby c.CustomerID
                             select c;

            ReportParameter rpCountry = new ReportParameter("p_Country", v_strCountry);
            this.rptExcel.LocalReport.SetParameters(new ReportParameter[] { rpCountry });
            this.rptExcel.LocalReport.DataSources.Add(new ReportDataSource("sp_LinqTestResult", datasource.ToList()));
            this.rptExcel.RefreshReport();
        }

9、关联事件:

代码

        private void Sheet1_Startup(object sender, System.EventArgs e)
        {
            this.fnDataIni();
            this.fnBuildDataSource(this.comCountry.Text);
        }

        private void Sheet1_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.comCountry.SelectedIndexChanged += new System.EventHandler(this.comCountry_SelectedIndexChanged);
            this.Startup += new System.EventHandler(this.Sheet1_Startup);
            this.Shutdown += new System.EventHandler(this.Sheet1_Shutdown);

        }

        #endregion

        private void comCountry_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.rptExcel.LocalReport.DataSources.Clear();
            this.fnBuildDataSource(this.comCountry.Text);
        }

10、最终运行效果:

11、生产的Excel位于Debug/Release下:

小结:

本次我们在VSTO中做了一个简单的报表,使用了Linq to SQL,当然,如果能用Excel的原生功能做报表效果更好,使用VSTO可以大大简化实现相同功能的方法,使得我们可以用更熟悉的方法来完成一些需求。

VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表的更多相关文章

  1. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  2. VSTO 学习笔记(十)Office 2010 Ribbon开发

    原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...

  3. 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发

    微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可 ...

  4. VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

    原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...

  5. VSTO学习笔记(八)向 Word 2010 中写入表结构

    原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...

  6. VSTO学习笔记(五)批量编辑Excel 2010 x64

    原文:VSTO学习笔记(五)批量编辑Excel 2010 x64 近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助. ...

  7. VSTO学习笔记(四)从SharePoint 2010中下载文件

    原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...

  8. VSTO学习笔记(二)Excel对象模型

    原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO ...

  9. VSTO学习笔记(十四)Excel数据透视表与PowerPivot

    原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...

随机推荐

  1. 刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?_百度知道

    刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?_百度知道     刘德华夏日Fiesta演唱会上那个表演探戈舞的演员是谁啊?    2008-05-28 00:04 topofhill | ...

  2. 详解js和jquery里的this关键字

    详解js和jquery里的this关键字 js中的this 我们要记住:this永远指向函数运行时所在的对象!而不是函数被创建时所在的对象.this对象是在运行时基于函数的执行环境绑定的,在全局环境中 ...

  3. android sim 卡短信读写

    因为对短信读写操作的api 被隐藏了 , 我们须要使用<Java反射机制的学习>一文中提到的反射的方法得到隐藏API . 这有一个用例大家能够下载http://zhushou.360.cn ...

  4. Swift - 判断设备方向(或监听设备方向的改变)

    通过UIDevice.currentDevice()来获取设备,可以取得设备当前的方向. 同时,我们可以添加一个通知来监听设备方向的变化,这样在开发中可以对不同的方向定制不同的排版布局界面. 下面通过 ...

  5. QNX简介<转载>

     QNX QNX是由QNX软件系统有限公司开发的实时操作系统. http://blog.csdn.net/happyhell/article/details/7087199 基本特征 * QNX是一个 ...

  6. Linux 安装Redis全过程日志

    wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make ...

  7. python 下载整个站点

    用python实现的下载整个站点工具. 核心流程非常easy: 1. 输入站点地址 2. url.得到响应的内容. 3. 依据响应的http报文头,假设类型为html, 则从第4步開始运行. 假设是其 ...

  8. Android KitKat 4.4 Wifi移植之Wifi driver

    本文讲述在Linux 3.10下Realek RTL8723A Linux Wifi 驱动的移植. Prerequisites 硬件平台:Atmel SAMA5 软件平台:Linux 3.10 + A ...

  9. 进阶: 案例八: Drag and Drop(动态)

    1.节点 2.UI 3. 4.方法: METHOD wddomodifyview . DATA: lo_container TYPE REF TO cl_wd_uielement_container, ...

  10. Ubuntu 环境安装整理

    Ubuntu11.04下Java开发环境搭建和配置 转自:http://guoyunsky.iteye.com/blog/1175861 类似的搭建,网上一搜一大把,但每次去搜索比较麻烦.我这里就整理 ...