原文: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、创建一个存储过程:

img_405b18b4b6584ae338e0f6ecaf736533.gif代码

IFEXISTS(SELECT*FROMdbo.sysobjectsWHEREid=OBJECT_ID(N'sp_LinqTest')ANDOBJECTPROPERTY(id, N'IsProcedure')=1)BEGINDROPPROCEDUREdbo.sp_LinqTestENDGOCREATEPROCEDUREdbo.sp_LinqTest

(@CountryVARCHAR(20)

)ASSELECT*FROMdbo.CustomersWHERECountry=@CountryGO

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

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

7、初始化数据:

img_405b18b4b6584ae338e0f6ecaf736533.gif代码

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

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

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

img_405b18b4b6584ae338e0f6ecaf736533.gif代码

privatevoidfnBuildDataSource(stringv_strCountry)
        {
            NorthwindDataContext ctx
=newNorthwindDataContext();
            var datasource
=from cinctx.sp_LinqTest(v_strCountry)
                             orderby c.CustomerID
                             select c;

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

9、关联事件:

img_405b18b4b6584ae338e0f6ecaf736533.gif代码

privatevoidSheet1_Startup(objectsender, System.EventArgs e)
        {
this.fnDataIni();this.fnBuildDataSource(this.comCountry.Text);
        }
privatevoidSheet1_Shutdown(objectsender, System.EventArgs e)
        {
        }
#regionVSTO Designer generated code///<summary>///Required method for Designer support - do not modify///the contents of this method with the code editor.///</summary>privatevoidInternalStartup()
        {
this.comCountry.SelectedIndexChanged+=newSystem.EventHandler(this.comCountry_SelectedIndexChanged);this.Startup+=newSystem.EventHandler(this.Sheet1_Startup);this.Shutdown+=newSystem.EventHandler(this.Sheet1_Shutdown);

}#endregionprivatevoidcomCountry_SelectedIndexChanged(objectsender, 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. 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发

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

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

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

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

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

  4. JS学习笔记六:js中的DOM操作

    1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...

  5. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  6. 吴恩达《机器学习》学习笔记六——过拟合与正则化

    吴恩达<机器学习>学习笔记六--过拟合与正则化 一. 过拟合问题 1.线性回归过拟合问题 2.逻辑回归过拟合问题 3.过拟合的解决 二. 正则化后的代价函数 1.正则化思想 2.实际使用的 ...

  7. ROS学习笔记六:理解ROS服务和参数

    ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...

  8. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  9. excel 中vb组合框_在Excel 2010中修复组合框大小调整

    excel 中vb组合框 With Excel data validation, you can create drop down lists on a worksheet. However, the ...

  10. Python学习笔记六——画小猪佩奇

    目录 Python学习笔记六--画小猪佩奇 画布 画笔 属性设置 操纵命令 运动命令 画笔控制命令 全局控制命令 其他命令 Python学习笔记六--画小猪佩奇 使用Python的turtle库可以绘 ...

最新文章

  1. 新手熊猫烧香学习笔记
  2. 【原创】MySQL 返回更新值(RETURNING)
  3. upload_labs_pass18_条件竞争
  4. 微信公众号无需二次登录_您无需两次解决问题-您需要一个设计系统
  5. Windows 2003 NTP 时间服务器设置
  6. AngularJS中页面传参方法
  7. 设置163的Centos6更新源
  8. Appium 夜神 配置
  9. vim linux python3,VIM:在python-mode中使用python3解释器
  10. Hadoop YARN学习之核心概念(2)
  11. C++编程语言中const关键字介绍
  12. 南天PR系列存折打印机驱动程序
  13. windows下利用注册表regedit手动删除文件
  14. 工业物联网盒子python_【工业4.0面面观】之十八:基于AWS的工业物联网应用案例...
  15. 夜神模拟器BURP抓包设置
  16. 10种食物让女性养颜排毒又减肥(图)
  17. Java春招面试复习:JDK 5-15都有哪些经典新特性
  18. Gitee推送本地文件到仓库并且创建子文件夹(详细)
  19. 2021贵州江口中学高考成绩查询,2020铜仁江口县中考分数线 江口县高中录取分数线 江口县中考成绩查询_中考_3773考试网...
  20. 3年收10亿,普陀山悄悄改名重启IPO

热门文章

  1. 解决ASP.NET2.0和1.1在同一台电脑上不能并行的问题(转)
  2. 选择排序之C++实现
  3. 三级联动第二种方法 三级联动.html
  4. 【bzoj3000】Big Number 【斯特林公式】
  5. 批处理命令——for
  6. Grep与web漏洞挖掘转
  7. opencv findContuors 详解
  8. 无法更新 TeamViewer 服务属性是什么意思?
  9. TeamViewer订阅版上线,正式开售!
  10. 等保要求的 linux 系统扫描脚本