首页 > 机房收费系统(VB.NET)——超具体的报表制作过程

机房收费系统(VB.NET)——超具体的报表制作过程



        之前做机房收费系统用的报表是Grid++Report,这次VB.NET重构中用到了VisualStudio自带的报表控件。

刚開始当然对这块功能非常不熟悉,只是探究了一段时间后还是把它做出来了。

       以下把在VisualStudio(我用的是VisualStudio2013,假设与您使用的版本号不同,过程中如有不符还请考虑实际情况)中制作报表的过程尽可能具体地记录下来,供刚開始学习的人学习參考。



        做事要有全局观,先看一下成品,做好的报表例如以下图:

        

        事实上可以达到这种效果须要做双方面的工作:加入报表控件ReportViewer和加入编辑RDLC文件。

个人感觉RDLC文件的作用是绑定数据库中须要的数据,ReportViewer则是引用RDLC文件来显示RDLC文件从数据库中绑定的数据。

        1、加入报表控件ReportViewer:

         加入报表控件非常easy:工具箱—报表—ReportViewer控件。

        2、加入和编辑编辑RDLC文件:

       加入RDLC文件,有两种方法:1、鼠标左击一下刚刚加入的ReportViewer,会发现控件右上角会出现一个黑色的小三角,点击那个小三角→设计新报表:
       


       假设是第一次创建RDLC文件,那么出来的界面是这种:
       


         如图片左上角所看到的。系统默认新建的这个数据集名称为“DataSet1”,为了命名规范,我们先取消“数据源配置向导”这个窗口,又一次命名数据集名称,我的命名为DataSetCheckoutReport:
          
         
       命名之后。点击“新建”进入“数据源配置向导”窗体:


        


        在“ 应用程序将从哪里获取数据?”问题下。选择“数据库”,下一步:


        


        在“ 要使用哪种类型的数据库模型?”问题下,选择“ 数据集 ”。下一步:


        


        在“ 应用程序连接数据库应使用哪个数据库连接? ”后点击“ 新建连接 ”:


        


        如上图,分别选择或输入对应项,測试连接。假设測试成功。则确定,自己主动返回到“ 数据源配置向导 ”窗口。下一步:
        【拓展】
         这个步骤假设您出现了【未能载入文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0, Culture=neutral,PublicKeyToken=89845dcd8080cc91”或它的一个依赖项。

系统找不到指定的文件】这个错误,那么能够下载安装SharedManagementObject.msi



        


        选择须要用到的数据库中的对象,设置DataSet名称,完毕,自己主动返回“ 报表向导 ”窗口,下一步:
        


       将须要的字段按顺序拖入行组或列组中,因为“值”中必须拖入字段。这里我们随便拖入一个字段(假设不须要的话后面还能够改)。一直点“下一步”。直到“完毕”,RDLC文件的雏形就出来了
        


        这里我们不须要用到对每列的sum,所以右键表格的每一个行和最后一列不须要的行和列删除,仅仅留下须要的行和列(或者直接把这个表删除。右键插入新的表,然后依据自己的须要编辑),我设计好的表为:
        
       第一行为列标题,第二行为数据关联行,即与数据库中数据的关联,鼠标放到第二行每一个单元格时,单元格右上角会出现一个小图标。点击则能够为该单元格以及该单元格所在的整列关联数据集中的数据。
      以下就開始设计报表的一些细节,如标题、參数、时间等等:
         


       加入文本框:加入标题 “机房收费系统结账单” 事实上就是在【工具箱】中加入文本框就能够。

其它文本如“開始时间:”、“结束时间:”等也是一样;

       加入内置字段:如上图。右下角的《Exp》就是报表中自带的函数。能够在【报表数据】的内置字段中加入,比方我在右下角的这个Exp就是要显示运行报表的时间,时间格式能够自己设定,右键《Exp》—表达式。在“为下面项设置表达式”下输入表达式就可以,如我想让它显示的时间格式为“2014-08-08 08:08:08”,则可输入“ =Format(Now,"yyyy-MM-dd hh:mm:ss") ”。
         加入參数:另外前面带有@的表达式,就是您的程序中将要传入报表中的參数,比方我想在报表左下角显示制作这个报表的操作员,而这个操作员的username仅仅能从程序中获取。上面的開始日期@startTime和截止日期@endTime也是须要从代码中传入。这类參数能够右击【报表数据】的“參数”,来加入參数。
     (注:假设您没有找到【工具箱】或【报表数据】那么就须要去【视图】中加入。)
       
       以下就到了最后阶段。加上代码,核心代码为(限于篇幅。在这仅仅贴上刷新button事件代码):
'在本代码层首先要加入下面引用
Imports System
Imports Microsoft.Reporting.WinForms


Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click'依据时间段查询结账记录Dim startTime As String = Format(dtpBegin.Value, "yyyy-MM-dd")Dim endTime As String = Format(dtpEnd.Value, "yyyy-MM-dd")Dim dt As New DataTable'对象【checkReportFacade】的【QueryCheckOut】方法功能是依据两个日期,查询此时间段的结账记录dt = checkReportFacade.QueryCheckOut(startTime, endTime)'声明一个报表数据源对象Dim rptDateSource = New ReportDataSource'设置报表数据集名称rptDateSource.Name = "DataSetCheckoutReport"'设置报表数据源实例rptDateSource.Value = dt'设置嵌入报表的资源名称reportViewer.LocalReport.ReportEmbeddedResource = "UI.CheckReport.rdlc"'清空报表数据源reportViewer.LocalReport.DataSources.Clear()'加入报表数据源reportViewer.LocalReport.DataSources.Add(rptDateSource)'设置报表中的參数集合(注意:这里的參数和报表中的參数大写和小写和数据类型都要一致)Dim strUserID As String = Entity.UtilUserEntity.UtilUser.UserIDDim params As ReportParameter()params = {New ReportParameter("startTime", startTime),New ReportParameter("endTime", endTime),New ReportParameter("userId", strUserID)}'传递报表中的參数集合reportViewer.LocalReport.SetParameters(params)'刷新报表Me.reportViewer.RefreshReport()End Sub


             温馨提示:代码中的数据集名称DataSetCheckoutReport一定要与刚開始创建RDLC文件时设定的数据集名称DataSetCheckoutReport一样,否则将会出现“尚未为数据源***提供数据源实例”的错误。


       最后,又一次单第一步加入的ReportViewer空间,点击右上角的小三角。在“选择报表”后选择您刚制作的报表就大功告成了。到此,一张简单的报表就制作好了
        
       假设步骤中有错误或不全面的地方。欢迎补充说明。



转载于:https://www.cnblogs.com/blfbuaa/p/6738592.html

更多相关:

  • Q:设计器如何打开A:如果是安装的,那么直接到菜单下,打开润乾报表设计器就行了,如果是压缩包或者从别人那儿拷过来的,就运行 eportHomein下面的startup.bat就可以打开了。 Q:做一个报表最基本需要哪些东西A:一般来说,常见的报表上面是查询条件,下面是以表格形式列出的查询结果,所以一个润乾报表由两个文件组成。 比...

  • 前言:现在碰到了水晶报表调用存储过程的问题,问题是这样的:ERP软件里有很多的数据表,有些报表的字段要从多个数据表里取数据,并且要对数据进行处理,来作为报表的字段,我看了些资料,说可以通过存储过程来取数据和运算数据后直接插入到水晶报表里,注意报表有多个字段大多字段需要运算的,要怎样做? 回复: 1、在项目中添加一个xsd,在设计界面...

  • 大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板。这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表。润乾集算报表提供了两种处理动态SQL的方法,使用宏和集算脚...

  • 凉皮是陕西著名的美食,现在成了全国性的美食,大部分人都爱吃,而且一年四季都适合食用,凉皮的做法不难,只是需要时间和耐心,就能做的非常爽口,今天教给大家专门用于凉皮的辣椒油做法和配方。凉皮调料水的做法:【大料水的用料】:草果、花椒、香叶、桂皮、肉蔻、姜片、小茴香【辣椒油的用料】:辣椒粉、盐、白芝麻【蒜水的用料】:蒜、盐、凉开水【麻酱汁的...

  • 题意:https://loj.ac/problem/2540 给定一个图(n<=20),定义一个求最大独立集的随机化算法 产生一个排列,依次加入,能加入就加入 求得到最大独立集的概率   loj2540 「PKUWC 2018」随机算法 本质就是计数题 每个点有三种状态:考虑过且在独立集中,考虑过未在独立集中,未考虑 本来在集合里的点...

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...