在windows应用程序中用ReportViewer显示程序运行中生成的DataSet中的数据
Posted on 2007-11-18 13:54 xshy 阅读(2394) 评论(1) 收藏 举报在VS2005平台中,虽然可以根据它提供的一系列向导生成rdlc报表文件,而且在把该报表文件绑定到ReportViewer控件时,也可以填充数据源并配置查询条件。但是我们大多时候希望动态地生成查询结果,然后将查询结果(一般是DataSet)交给ReportViewer显示。本文以windows应用程序为例实现了这个功能,Web应用程序道理类似。
1, 新建一个windows应用程序,命名为report。
2, 将工具箱-数据下的ReportViewer控件拖入窗体Form1的设计器中。点击右上角的小三角图标展开ReportViewer任务 快捷菜单,选择 设计新报表,此时会打开报表Report1.rdlc设计界面。
3, 此时如果项目中已经有存在的数据源可以直接使用,report项目中没有已经做好的数据源,所以需要新建数据源。这里我们选择 添加新数据源,会出现“数据源配置向导”,选择从 数据库 获得数据,下一步选择或新建数据连接(这里以连接到ibm服务器上的NorthWind数据库为例),填写好连接信息,选择在连接字符串中包含连接信息中的敏感数据这个复选项,下一步出现所连接数据库中的所有数据对象,包括表、视图、存储过程、函数。在所有表中选中Customers这张表,给DataSet命名为CustomDS。点完成生成数据集CustomDS,保存结果。
4, 双击Report1.rdlc,打开报表设计界面,将此时的报表设计工具箱中的 报表项 的 表 拖入 报表设计界面。选择 “数据”菜单下的“显示数据源”,可以在数据源下看到CustomDS中包含Customers及其所有字段,任意选其中的多个字段将其拖入Report1.rdlc设计界面的表的“详细资料”处 用于报表显示。这里应该选希望用于生成报表的所有字段,例如我们选前四个字段。保存结果。
5, 回到Form1的设计界面,按第二步中的操作将刚才设计好的Report1.rdlc绑定到ReportViewer1上,为ReportViewer1选择报表后,打开 数据源 为报表的数据源(在我们的例子中是CustomDS_Customers,请记住这个名称,后面编程还要用到!)指定一个实例,为了简单起见,就用我们刚才建立的CustomDS中的Customers表作为数据源实例。此时全部保存结果,编译一下可以看到初步运行结果。
下面,就需要对呈现的报表资料进行定制,也就是用自定义的操作生成符合我们需要的DataSet,然后用此DataSet的数据对报表进行资料绑定和呈现。详细代码和注释如下:
using System;2
using System.Collections.Generic;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Text;7
using System.Windows.Forms;8
using System.Data.SqlClient;9
using System.Configuration;10
using Microsoft.Reporting.WinForms;11

12
namespace report13
{14
public partial class Form1 : Form15
{16
private SqlConnection connection;17
18
public Form1()19
{20
InitializeComponent();21
}22

23
private void Form1_Load(object sender, EventArgs e)24
{25
// TODO: 这行代码将数据加载到表“customDS.Customers”中。您可以根据需要移动或移除它。26
this.customersTableAdapter.Fill(this.customDS.Customers);27

28
//通过定义该SQL语句可以实现对报表显示数据的定制,但要注意该语句得到的所有字段必须都是在Report1.rdlc中出现的,否则报表显示不能识别29
string queryString = "SELECT CustomerID, CompanyName, ContactName,ContactTitle FROM Customers WHERE ContactTitle='Owner'";30
connection = GetConnection();31
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);32

33
DataSet customers = new DataSet();34
adapter.Fill(customers,"Customers");35

36
//此处生成一个新的报表数据源,注意:"CustomDS_Customers"就是reportViewer1绑定的数据源名称,用它和dataset中的datatable作为参数生成报表数据源,37
//将数据源再指定给reportViewer1,刷新报表。38
ReportDataSource rds = new ReportDataSource("CustomDS_Customers", customers.Tables[0]);39
this.reportViewer1.LocalReport.DataSources.Clear();40
this.reportViewer1.LocalReport.DataSources.Add(rds);41
this.reportViewer1.RefreshReport();42
}43

44
/// <summary>45
/// 获得数据库连接,为了不在应用程序代码中出现连接字符串以保证安全性,可以从配置文件中检索出连接字符串,46
/// 这里关键是ConfigurationManager这个类,必须在项目中添加System.Configuration.dll的引用才能使用ConfigurationManager类,47
/// “report.Properties.Settings.NorthwindConnectionString”串是连接字符串的名称,在项目的配置文件app.config中可以找到。48
/// </summary>49
/// <returns></returns>50

51
private SqlConnection GetConnection()52
{53
string connectionString = ConfigurationManager.ConnectionStrings["report.Properties.Settings.NorthwindConnectionString"].ConnectionString;54
SqlConnection connection = new SqlConnection(connectionString);55
return connection;56
}57
}58
}59

运行效果图:



浙公网安备 33010602011771号