在VSWinform项目中使用RDLC报表定义文件、ReportViewer控件生成本地报表 - 水光

时间:2024-03-08 21:30:37

在VS2010Winform项目中使用RDLC报表定义文件、ReportViewer控件生成本地报表

这是一个使用RDLC报表定义文件、ReportViewer控件生成本地报表的简单示例。(此文章存在瑕疵,2011.10.29重新编辑)
一、新建一个.net4.0项目:(下图的.NET Framework 2.0 改为 .NET Framework 4.0----2011.10.29)
该项目命名为ReportApp,为项目新建两个文件夹 Reports、Datasets。Reports文件夹存储报表定义文件,Datasets存储数据集。
二、创建Dataset
1、第一个Dataset:确保解决方案资源管理器中选中Datasets后,点击 菜单中的“项目”;“添加新项”;选择左侧 “数据”,再选择“数据集”;命名为FirstDataSet.xsd,如下图.
在“服务器资源管理器”中新建一个到Northwind.mdb数据库的连接,并将Northwind.mdb数据库添加到项目中。
将Northwind.mdb中的Products表拖至FirstDataset.xsd中。
2、同样的方法创建第二个Dataset:SecondDataset.xsd。将将Northwind.mdb中的Orders表拖至其中。
三、创建Reports
1、第一个报表ReportProducts:确保解决方案资源管理器中选中Reports后,点击 菜单中的“项目”;“添加新项”;选择左侧 “Reporting”,再选择“报表”;命名为ReportProducts.rdlc,如下图。
修改ReportProducts.rdlc文件属性中的“复制到输出目录”,改为:始终复制。如果不修改此属性,下面生成报表时将找不到报表定义文件。
选择左侧的“报表数据”工具箱,新建一个数据集。
命名数据集名称为:RpProductsDataset,此名称在后面的Code有用。选择数据源为FirstDataset,选择可用数据集为Products。
在工具箱里拖拽一个表至报表,将Tablix1的datasetname设为RpProductsDataSet,然后设置表格各个单元的字段。
2、使用同样的方法建立第二个报表:ReportOrders.rdlc,报表的数据集名称为RpOrdersDataset。
四、生成报表
双击打开form1.vb,从工具箱中将ReportViewer控件拖至Form1中。如果在VS2010 中找不到ReportViewer控件,可以右击工具箱中的“数据”,选择"选择项...",从中选择ReportViewer控件。注意:有winform版和web版共两种ReportViewer控件。
将ReportViewer控件的Anchor属性设置为Top, Bottom, Left, Right。form1的WindowState属性设置为Maximized。
从工具箱中拖拽两个Button,分别命名为ReportProducts、ReportOrders。
form1的代码如下:
 
Public Class Form1

    \'Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    \'    Me.ReportViewer1.RefreshReport()
    \'End Sub

    \'ReportProducts报表
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        \'定义数据集
        Dim ProductsDS As New FirstDataSet
        \'数据SQL命令
        Dim commandtext As String = "select * from Products"
        \'报表定义文件
        Dim rdlcfile As String = "Reports/ReportProducts.rdlc"
        \'报表中使用的数据集名称
        Dim reportds As String = "RpProductsDataSet"
        \'生成报表
        Me.GetReport(ProductsDS, commandtext, rdlcfile, reportds, False)

    End Sub

    \'ReportOrders报表
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        \'定义数据集
        Dim ProductsDS As New SecondDataSet
        \'数据SQL命令
        Dim commandtext As String = "select * from orders"
        \'报表定义文件
        Dim rdlcfile As String = "Reports/ReportOrders.rdlc"
        \'报表中使用的数据集名称,注意:名称中大小写敏感
        Dim reportds As String = "rpOrdersDataset"
        \'生成报表
        Me.GetReport(ProductsDS, commandtext, rdlcfile, reportds, True)
    End Sub

    Private Sub GetReport(ByVal ds As DataSet, ByVal Commandtext As String, ByVal RDLCFile As String, ByVal ReportDS As String, ByVal isLandscape As Boolean)
        \'ds:使用哪一个数据集
        \'Commandtext:数据SQL命令
        \'RDLCFile:RDLC文件路径及文件名
        \'ReportDS:RDLC报表文件使用的数据集名称
        \'isLandscape:报表页面是否以横向显示

        \'----------------------------获取数据----------------------------------
        \'定义数据集
        \'Dim DataSetUsed As New ds
        \'定义连接
        Dim conn As New OleDb.OleDbConnection
        \'连接的关键字从配置中获取
        conn.ConnectionString = My.Settings.NorthwindConnectionString
        \'定义数据命令
        Dim comm As New Data.OleDb.OleDbCommand
        comm.CommandType = CommandType.Text
        comm.CommandText = Commandtext
        comm.Connection = conn
        \'定义数据适配器
        Dim DA As New OleDb.OleDbDataAdapter(comm)
        \'填充数据
        Using conn
            conn.Open()
            DA.Fill(ds.Tables(0))
        End Using

        \'--------------------------------生成报表-----------------------------
        \'设置使用本地报表模式
        Me.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
        \'清空ReportViewer1控件原有的数据源
        Me.ReportViewer1.LocalReport.DataSources.Clear()
        \'定义本地报表变量
        Dim ReportEngine As Microsoft.Reporting.WinForms.LocalReport
        ReportEngine = ReportViewer1.LocalReport
        \'指定报表文件
        ReportEngine.ReportPath = RDLCFile
        \'加载数据源,注意:数据集的大小写是敏感的。
        ReportEngine.DataSources.Add(New Microsoft.Reporting.WinForms.ReportDataSource(ReportDS, ds.Tables(0)))

        \'---------------------设置预览---------------------------------

        \'显示模式是打印预览模式
        Me.ReportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout)
        \'页面设置变量
        Dim pageset As Drawing.Printing.PageSettings = Me.ReportViewer1.GetPageSettings
        \'页面是否是横向显示
        pageset.Landscape = isLandscape
        \'设置页面
        Me.ReportViewer1.SetPageSettings(pageset)
        \'以百分比显示
        Me.ReportViewer1.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent
        \'100%的比例
        Me.ReportViewer1.ZoomPercent = 100

        \'刷新报表
        Me.ReportViewer1.RefreshReport()
    End Sub
End Class
最后的效果如下:
  
 
后记:关于RDLC报表的部署
     reportviewer控件不属于.net framework 框架的一部分。如果要发布报表,需要安装Microsoft Report Viewer 2010 Redistributable Package  (下载地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=A941C6B2-64DD-4D03-9CA7-4017A0D164FD&displaylang=zh-cn),用于查看使用 Microsoft 报表技术设计的报表的控件。发布应用程序时,项目->属性->发布->系统必备  勾选Microsoft Visual Studio 2010报表查看器   。