您现在的位置: 365建站网 > 365学习 > C# 利用ReportViewer生成报表的代码

C# 利用ReportViewer生成报表的代码

文章来源:365jz.com     点击数:1294    更新时间:2018-06-06 09:18   参与评论

ReportViewer 控件,使您可以向自定义应用程序中添加功能齐全的报表。 报表可以包含表格格式数据、聚合数据和多维数据。 提供 ReportViewer 控件的目的是可以处理和显示应用程序中的报表。

控件有两种版本。 ReportViewer Web 服务器控件是一个用于在 ASP.NET ajax 项目中驻留报表的 ASP.NET AJAX 控件。 ReportViewer Windows 窗体控件用于在 Windows 应用程序项目中驻留报表。

这两种版本的控件都可以配置为以本地处理模式或远程处理模式运行。

一、ReportViewer使用小例子的演示。

1、新建项目。

新建一个Windows窗口程序项目,命名为“Demo";

2、加入ReportViewer控件。

(1)在默认出现的Form1.cs[设计]视图中手动调节下Form1窗体的大小,左侧工具箱-->报表-->双击其中的”ReportViewer";

(图 1)

(2)切换至设计窗口,选择ReportVierwer控件右上角黑色小三角,显示“ReportViewer任务”,选择”在父容器中停靠“;

(图 2)

3、添加数据集。

(1)在”解决方案资源管理器“的本项目”Demo“上右键,-->添加-->新建项...。在”已安装的模板“(左侧)选择”数据“,在对应的右侧栏中选”数据集“,并为其命名为”testDataSet.xsd“。

(图 3)

(2)在自动显示的testDataSet.xsd窗口空白处右键,-->添加-->数据表。

(图 4)

(3)点击表头为其改名为”testDataTable",并在下一行的空白处右键,-->添加-->列。按快捷键“Ctrl + L”,共建四个列,并将列名自定义修改。(及时保存)

(图 5)

4、添加报表。

(1)同添加数据集相似。在项目名称上右键,-->添加-->新建项...。”已安装模板“中选择”Reporting“,相应右侧选择”报表“,在下面名称中改为”testReport.rdlc“。

(图 6)

(2)在新视图的主体部分(黑色方框内部为主体部分,外部为报表部分)空白处右键,-->插入-->表。

(图 7)

(3)会自动弹出”数据集属性“对话框,将”名称“改为”DataSetName"(这个名称很重要,后面代码中要用到,故要记清),“数据源”选择刚新建的“testDataSet",”可用数据集“会自动选择”testDataTable“,"确定”。

(图 8)

(4)在testReport.rdlc[设计]视图下,刚建的“表”只有三列,在任一单元格上右键,-->插入列-->靠右。在第一行的”表头“输入这三列的表头,在第二行的”数据“行,鼠标移动每个单元格上,点击单元格右上角的图标,选择相应的列。

(图 9)

5、绑定报表。

返回”Form1.cs[设计]"视图,如图 2类似,这次点击“选择报表”右侧的下拉条,选择我们新建的报表“demo.testReport.rdlc",全部保存。

6、添加代码。

查看”Form1.cs“的代码,在Form1_Load()方法中添加代码。代码如下(以下只是Form1_Load()方法的代码,不是全部,添加时需要在using下多加一行)。


using Microsoft.Reporting.WinForms; 
private void Form1_Load(object sender, EventArgs e)  
        {  
            loadReport();  
            this.reportViewer1.RefreshReport();  
        }  
  
        public void loadReport()  
        {  
            DataTable dt = new DataTable();  
            //定义本地数据表的列,名称应跟之前所建的testDataTable表中列相同。  
            dt.Columns.Add("Column1", typeof(string));  
            dt.Columns.Add("Column2", typeof(string));  
            dt.Columns.Add("Column3", typeof(string));  
            dt.Columns.Add("Column4", typeof(string));  
  
            //动态生成一些测试用数据  
            for (int i = 0; i < 50; i++)  
            {  
                DataRow row = dt.NewRow();  
                row[0] = "Test01-" + i.ToString();  
                row[1] = "Test02-" + i.ToString();  
                row[2] = "Test03-" + i.ToString();  
                row[3] = "Test04-" + i.ToString();  
                dt.Rows.Add(row);  
            }  
  
            //设置本地报表,使程序与之前所建的testReport.rdlc报表文件进行绑定。  
            this.reportViewer1.LocalReport.ReportPath = "testReport.rdlc";  
            this.reportViewer1.LocalReport.DataSources.Clear();  
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetName",dt));  
        }

 



7、运行效果。

二、需要注意的几个地方。

1、代码中new ReportDataSource("DataSetName",dt)),这里的DataSetName是上面”一、4、(3)“里那个名字,而不是所建的数据集文件”testDataSet.xsd"的名字。我之前因为把这里弄错,花了好长时间才修正。

2、按上述步骤弄完后,也许还不好出来想要的结果。可能会弹出“本地报表处理期间出错”等错误提示。

解决方法:将“testReport.rdlc"文件复制一份放到提示的指定Debug目录下。

上述方法固然可以,但每次都要手动将文件进行复制,显然不合适。这时其实只需要在”解决方案资源管理器“中点击报表文件”testReport.rdlc",在下方的属性一栏中,从“复制到输出目录”后面的下拉菜单中选择“始终复制”。这样,便不用手动往Debug目录复制文件了。(也有网友将属性中的“生成操作”一项的“嵌入的资源”改为“内容”。但对本例不适用,仅作说明)

三.C# 利用ReportViewer生成报表实例

利用微软自带的控件ReportViewer进行报表设计的小例子,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点:

ReportViewer :位于Microsoft.Reporting.WinForms命名空间, 主要用于报表的显示

Report:报表,以rdlc结尾的文件,可视化设计报表模板。

报表数据:内置字段,参数,图像,数据集(本报表主要使用参数,和数据集)

ReportParameter:使用名称和值实例化新的报表参数

ReportDataSource:报表的数据源与DataTable对象联系起来

效果图

如下:


核心代码

/// <summary>
        /// 设置报表
        /// </summary>
        private void SetReport()
        {
            //第一步:清除之前的数据
            this.rptView.LocalReport.DataSources.Clear();
            //第二步:指定报表路径
            this.rptView.LocalReport.ReportPath = "Report2.rdlc";
            //第三步:构造新的DataTable
            DataTable dt = new DataTable("DataTable1");
            dt.Columns.Add("Name");
            dt.Columns.Add("Score");
            dt.Columns.Add("Id");
            dt.Rows.Add(new object[] { "语文", 80, "Y0001" });
            dt.Rows.Add(new object[] { "数学", 75, "S0001" });
            dt.Rows.Add(new object[] { "英文", 96, "E0001" });
            //名称不能写错,和报表中的数据集名称一致
            ReportDataSource rdsItem = new ReportDataSource("DataSet1", dt);
            //此处可以有多个数据源
            this.rptView.LocalReport.DataSources.Add(rdsItem);
            //第四步:构造参数
            List<ReportParameter> lstParameter = new List<ReportParameter>() {
                new ReportParameter("Title",this.txtTitle.Text),
                new ReportParameter("Id",this.txtId.Text),
                new ReportParameter("Name",this.txtName.Text),
                new ReportParameter("Age",this.txtAge.Text),
                new ReportParameter("Sex",this.txtSex.Text),
                new ReportParameter("Salary",this.txtSalary.Text),
                new ReportParameter("Depart",this.txtDepart.Text)
            };
            this.rptView.LocalReport.SetParameters(lstParameter);
            this.rptView.ZoomMode = ZoomMode.Percent;
            this.rptView.ZoomPercent = 100;
            //第五步:刷新报表
            this.rptView.RefreshReport();
        }


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (1294人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------