使用ASP.NET 2.0中的ReportViewer控件

Asp.net报表ReportViewer设计(RDLC) ReportViewer是微软的报表控件,其设计文件为RDLC,数据架构为数据集。效果图如下: 其中序号调用的是内置函数,姓名、收入、所属部门绑定的是数据源,头像绑定的是URL指向的外部图片。下面是实现过程。 一.新增数据集 1.在创建Web空项目后,在项目上右键->添加->新建项->数据->选择数据集,见下图 2.将数据集命名为DataSet1_DataTable1 3 阅读详情

  介绍

  任何数据驱动型的应用程序都有一个普遍的需求,那就是报表。 但是,在ASP.NET 1.x中并没有给我们提供这个非常重要的特性。 然而很幸运的是,伴随着.NET 2.0而来的ReportViewer控件可以满足你对报表的一些基本需求。 我将会在本文中向你演示如何使用这个控件。 ReportViewer控件既可以在web程序中使用,也可以在windows程序中使用。 在这里,我将只介绍如何在web程序中使用它。

  报表示例

  我们假设要生成一个如下所示的顾客信息列表:



  上面的报表是一个非常简单的以国家分组的顾客信息列表。 报表的数据是从Northwind数据库的Customers表里获取的。 默认情况下,它会显示所有的顾客信息。 但是,你也可以让它显示属于你指定的某个国家的顾客信息。

  该报表是使用ReportViewer控件设计的,它可以从强类型的DataSet中或者自定义的对象集合中获取数据。 在实际的程序开发中,我们往往会使用3层架构,数据的获取经常会是从业务层取得的DataSet或一个泛型集合。 在这里,我打算使用一个泛型集合作为数据源,而不是强类型的DataSet。

  创建类库

  首先,打开Visual Studio,然后创建一个名为ReportViewerLib的类库项目。 添加一个如下所示的名为Customer的类:

using System;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Collections.Generic; 
namespace ReportViewerLib
{
 public class Customer
 {
  public string strCustomerID;
  public string strCompanyName;
  public string strContactName;
  public string strCountry;
  public string CustomerID
  {
   get
   {
    return strCustomerID;
   }
   set
   {
    strCustomerID = value;
   }
  }
  public string CompanyName
  {
   get
   {
    return strCompanyName;
   }
   set
   {
    strCompanyName= value;
   }
  }
  public string ContactName
  {
   get
   {
    return strContactName;
   }
   set
   {
    strContactName= value;
   }
  }
  public string Country
  {
   get
   {
    return strCountry;
   }
   set
   {
    strCountry= value;
   }
  }
  public static List<Customer> GetCustomersForCountry(string country)
  {
   SqlConnection cnn=new SqlConnection(
    ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
   SqlCommand cmd=new SqlCommand();
   cmd.Connection=cnn;
   cmd.CommandText="select 
   CustomerID,CompanyName,ContactName,Country 
from customers where country=@country";
   SqlParameter p=new SqlParameter
("@country",country);
   cmd.Parameters.Add(p);
   cnn.Open();
   SqlDataReader reader = cmd.ExecuteReader();
   List<Customer> list = new List<Customer>();
   while (reader.Read())
   {
    Customer c = new Customer();
    c.CustomerID = reader.GetString(0);
    c.CompanyName = reader.GetString(1);
    c.ContactName = reader.GetString(2);
    c.Country = reader.GetString(3);
    list.Add(c);
   }
   cnn.Close();
   return list;
  }
  public static List<Customer> GetAllCustomers()
  {
   SqlConnection cnn = new SqlConnection(
    ConfigurationManager.ConnectionStrings
    ["NorthwindConnectionString"].ConnectionString);
   SqlCommand cmd = new SqlCommand();
   cmd.Connection = cnn;
   cmd.CommandText = "select 
   CustomerID,CompanyName,ContactName,Country from customers";
   cnn.Open();
   SqlDataReader reader = cmd.ExecuteReader();
   List<Customer> list = new List<Customer>();
   while (reader.Read())
   {
    Customer c = new Customer();
    c.CustomerID = reader.GetString(0);
    c.CompanyName = reader.GetString(1);
    c.ContactName = reader.GetString(2);
    c.Country = reader.GetString(3);
    list.Add(c);
   }
   cnn.Close();
   return list;
  }
 }
}
  Customer类定义了四个公共属性,即CustomerID、CompanyName、ContactName和Country。 在之后,是这个类包含的两个静态方法 – GetCustomersForContry()和GetAllCustomers()。 这两个方法都是比较简单的,一个是返回属于某一个国家的所有顾客信息,另一个是返回全部顾客信息。 首先打开Northwind数据库的连接,然后通过SqlCommand对象执行SELECT查询。 之后,用SqlDataReader对象来获取数据。 遍历这个SqlDataReader对象,在其内每次都创建一个Customer对象,然后设置它的各个属性,最后把其添加到Customer对象的泛型集合中。 在类的结尾处就是把这个Customer对象的泛型集合返回给调用者。

  创建数据源

  设计报表的时候,需要在你的项目中为其指定一个数据源。 在你的项目中添加一个数据源可以这样做,选择“数据”菜单 -> 添加新数据源。 然后将会出现如下图所示的对话框:



  你的数据源可以是数据库、web service或者是一个对象。 本例中我们选择的是对象。 然后单击“下一步”按钮,会弹出让我们选择数据源的界面。 我们选择的是Customer类(如下图所示)。



  单击“完成”按钮后就完成了数据源配置向导。 这样,你就在你的类库中添加了一个新的数据源。 如果要查看数据源的话可以这么做,选择“数据”菜单 -> 显示数据源,就会出现如下图所示的界面:



  设计报表

  接下来添加一个报表。 右键单击项目,选择“添加新项”。 在对话框里选择“报表”,并单击“添加”按钮(如下图所示)。 这样,我们就添加了一个名为“Report1.rdlc”的文件。 .rdlc文件是一个报表文件,它保存的是报表布局和数据映射。



  一旦你打开了Report1.rdlc文件,Visual Studio的工具箱里就会显示出一套与报表相关的控件(如下所示)。



  这些控件中,“文本框”控件和“表”控件是非常常用的。 “文本框”控件用于显示一段静态文本或者是一个表达式。 “表”控件用于显示表格数据,其生成的结果会显示在你的报表的“主体”中。

  设计出的报表如下图所示:



  在报表的“页眉”部分的头部,有一个文本框,其Value属性的值为“Customer Listing”。 在这个文本框的下面还有另一个文本框,其Value属性的值为“=Parameters!SubTitle.Value”。它的意思就是指明文本框的值来自名为SubTitle的参数。 我们如何来定义参数呢? 这需要在报表的ReportParameters属性中添加参数。 打开的报表参数对话框如下图所示:



  请注意:参数的设置是在我们的.NET代码中完成的。

  如果要在报表上显示日期的话,只要设置相关的文本框的Value属性为“=FormatDateTime(ToDay(),DateFormat.ShortDate)”即可。 报表的一大优势就是有很多的内置函数,如ToDay()和FormatDateTime之类的。 本例中,我们使用FormatDateTime()函数来以ShortDate的格式显示当前的日期(ToDay())。

  现在,从工具箱里拖拽一个“表”控件到你的报表上。 默认情况下,“表”控件有3行3列,3行分别是:表头、详细信息和表尾。 当然,你也可以为“表”控件添加行和列。 从数据源窗口中拖拽CustomerID、CompanyName、ContactName和Country属性到你的“表”控件的详细信息行上。 这样,系统将会自动地添加文本框,并设置其属性为=Fields!CustomerID.Value、=Fields!CompanyName.Value之类的。 此时,列头也会被自动地添加。 当然,你也可以根据你的需求做你需要的修改。

  接下来,我们要按顾客所属的国家对记录进行分组。 右键单击详细信息行的边框,选择插入组(如下图所示)。



  然后将会出现如下图所示的对话框:



  在“排序”选项卡中选择“=Fields!Country.Value”作为表达式,选择“Ascending”作为排序方向。

  就是这些东西,很简单吧。 这样,我们就完成了报表的设计。

  显示报表

  新建一个名为“ReportViewerDemo”的web站点。 添加ReportViewerLib程序集的引用,这样该程序集就会拷贝到你的web站点的BIN目录下。 之后,把Report1.rdlc文件添加到你的web站点中。 在工具箱的“数据”选项卡中拖拽一个ReportViewer控件到你的Default.aspx页上, 打开ReportViewer控件的智能标记面板,在“选择报表”的下拉框中选择Report1.rdlc,如下图所示:



  选择好报表文件后,系统会自动地添加一个TypeName属性为Customer的对象数据源控件。 你可以在对象数据源控件的配置向导中验证一下。

  接下来,拖拽一个DropDownList控件到页的头部,并为其设置4个选项 – All、USA、UK和Brazil。 同时设置它的AutoPostBack属性为True。 然后,打开数据源控件的配置向导,设置“SELECT”操作为SelectCustomersForCountry()方法。



  设置SelectCustomersForCountry()方法的country参数为DropDownList1的SelectedValue。



  默认情况下,将在报表中显示所有顾客信息。 当你在DropDownList选择了一个国家的时候,报表中就会显示属于你所选择的国家的顾客信息。 要完成这样的功能,我们只需要处理DropDownList的SelectedIndexChanged事件。

protected void DropDownList1_SelectedIndexChanged
(object sender, EventArgs e)

 if (DropDownList1.SelectedValue == "All")
 {
  ObjectDataSource1.SelectMethod = "GetAllCustomers";
  ObjectDataSource1.SelectParameters.Clear();
  ReportParameter param = new ReportParameter
("SubTitle", "List of all the customers");
  ReportParameter[] p ={ param };
  ReportViewer1.LocalReport.SetParameters(p);
 }
 else
 {
  ObjectDataSource1.SelectMethod = "GetCustomersForCountry";
  ObjectDataSource1.SelectParameters[0].DefaultValue 
= DropDownList1.SelectedValue;
  ReportParameter param = new ReportParameter
("SubTitle", "List of customers for a country");
  ReportParameter[] p ={ param };
  ReportViewer1.LocalReport.SetParameters(p);
 }
}
  这段代码首先检查DropDownList控件的SelectedValue属性。 如果是“All”的话就设置数据源控件的SelectMethod属性为GetAllCustomers。 另外,我们还需要清空SelectParameters集合,因为GetAllCustomers()方法不需要任何参数。 接下来,我们创建一个ReportParameter类的实例,并在其构造函数中设置报表的参数名和参数值。 回忆一下我们在设计报表时定义的参数。 然后再创建一个ReportParameter数组。 调用SetParameters()方法,并用这个数组作为其参数。 “else”代码块也是非常地简单,就是使用的方法变成了GetCustomersForCountry()而已。

  就是这些东西,很简单吧。 报表已经搞定了。 你可以运行一下Default.aspx页看看效果。 注意,ReportViewer控件已经内置了导出特性,它允许你把报表导出为Excel或PDF格式。 ReportViewer控件还很多的属性,你可以自己摸索一下。

  总结

  ASP.NET的ReportViewer控件提供了很多报表的基本功能。 在本文中,我们使用了对象数据源控件来开发一个报表。 我们创建了一个类库和一个数据源。 最后使用ReportViewer控件来显示报表。 
 
c# asp.net控件ReportViewer应用 VS2005开发 asp.net c#语言中ReportViewer综合应用,对数据绑定进行多种方式。 立即下载

相关推荐

Asp.netReportViewer的RDLC设计及动态绑定数据源

Asp.netReportViewer的RDLC设计及动态绑定数据源

ASP.NET笔记(四)

  一、网页中的基本数据访问(GridView,SqlDataSource) 添加显示数据的 GridView 控件     若要在 ASP.NET 网页上显示数据,需要下列元素: 与数据源(如数据库)的连接。 在下面的过程中,您将创建一个到 SQL Server Northwind 数据库的连接。 该页上的一个数据源控件,该控件执行查询并管理查询结果。 该页上的一个用于实际...

weixin_34366546的博客 151

ReportViewer报表

1. 环境准备:下载安装最新版ReportViewer(PS:需要安装Microsoft SQL Server System CLR Types package);如果您的开发工具是Visual Studio 2015,记得安装Microsoft SQL Server Tools,因为需要安装ReportViewer报表设计器。 2. 下面我们通过一个例子(示例图书品种报表)来演示

ASP.NET服务器控件使用Reportviewer 报表

1.       Reportviewer 报表 1.1. Reportviewer控件 注:本教程附2个事例: l  演练:在本地处理模式下将数据库数据源ReportViewer Web 服务器控件一起使用 l 演练:在本地处理模式下将业务对象数据源ReportViewer Web 服务器控件一起使用 如果您已经对ReportViewer控件基础知识比较了解,可以直接参阅事

oemoon的专栏 2万+

Asp.net(C#) 中使用 ReportViewer

a. ReportViewer关联Report1.rdlc的简单呈现b. 对带有报表参数的Report1.rdlc的呈现c. 利用程式生成的DataSet 填充报表d. 调用存储过程 生成DataSet 填充报表==========简单的呈现 ==========1. 打开VS2005,文件->新建->网站 选择语言种类(C#)2. 在该解决方案下 设计

qiume的专栏 4742

VB.NETReportviewer控件通过代码绑定多个RDLC文件

上一篇中分享了ReportViewer控件绑定RDLC报表并显示的简单方法,但很多情况下,上一种方法就会有很多弊端,今天分享一个通过代码绑定代码的方法。 首先新建一个工程,在工程中加入ReportViewer控件,然后在程序的开头,添加一下代码。 Imports Microsoft.Reporting.WinForms ...

weixin_45357668的博客 1225

[翻译]使用ASP.NET 2.0中的ReportViewer控件

原文地址:http://www.dotnetbips.com/articles/51df0f69-ee0e-4982-a7bb-d3e9b2182841.aspx[原文源码下载][译者改后代码下载][翻译]使用ASP.NET 2.0中的ReportViewer控件原文发布日期:2007.03.22作者:Bipin Joshi翻译:webabcd介绍任何数据驱动型的应用程序都有一个普遍的需求

johncools的博客 3155

ASP.NET服务器控件ReportViewer(四)

演练:在本地处理模式下将业务对象数据源ReportViewer Web服务器控件一起使用 本演练说明了如何在Microsoft Visual Studio 2005 ASP.NET应用程序中的报表使用对象数据源。有关业务对象和对象数据源的详细信息,请参阅Binding to Business Objects。 请执行下列步骤向Visual Studio ASP.NET网站...

weixin_30371469的博客 192

关于.net使用reportview所需注意

参考文章链接:http://www.cnblogs.com/watercold/p/5258608.html 这段时间在做一个winform的小项目时,发现使用.net中的ReportViewer插件的时候出现了一些小问题,这里码住。 使用ReportViewer需注意打包时需要将dll文件引用到exe目录。否则会出现他人使用时找不到文件的错误,例如: 遇见类似错误,只需...

weixin_30758821的博客 408
上一篇: ASP.NET 主题和外观
下一篇: ASP.NET实现投票结果的图片进度条显示代码
powerboy
博客等级 码龄25年 12粉丝 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值