本地报表处理期间出错?(VS2012自带报表的使用)

●编者的话

  VS2015版本并没有报表这一说,这就让我这个小白在用2015之后才知道这个不是秘密的秘密。然而机房重构有报表的功能啊,询问师傅之后,得到的结论是:得做,不做不能过。然后小编毅然决然的安装了更低的版本,VS开发人员怎么想的呢?高版本竟然没有低版本有的报表??再说一下wuli机房收费系统吧,改善完报表的功能之后就基本可以跑起来了。从2016年2月到5月,整整跨过了三个月,这中间的辛酸,不说想必大家也知道。经历了那么多的错误,无论是别人给调出来的还是自己弄出来的,总归是学到了。下面的一个错误真是让人又头疼又感叹。路漫漫其修远兮,吾将上下而求索。

VS报表,你还不会用吗?

不要着急。一学就会。先普及一下知识:

       ·数据源就是我们建立的数据库中的表,我们想要显示的哪张表中的内容。
  ·报表模版是扩展名为rdlc的文件。
  ·存放数据的容器就是扩展名为xsd的文件。
  ·显示在From窗体上是ReportViewer控件。
  对于建立这些文件的顺序,从哪种文件开始都可以,系统都会给出提示

step1: 在工具箱中找到报表,点击Reportviewer



step2: 右击UI解决方案—>添加—>新建项找到报表



  可以根据自己的名称更改一下报表的名称,在周结账单中我取名为CheckWeekReport1, 这样就进入了报表模板界面
本地报表处理期间出错?(VS2012自带报表的使用)_第1张图片
  然后我们需要在模板上创建一些表格用来对应显示数据库中的内容,所以我们用该建立表。点击表
相应的在表中添加字段和对应数据库中的列,这时会提示如下的内容
本地报表处理期间出错?(VS2012自带报表的使用)_第2张图片

step3: 选择新建,之后选择想显示表的数据库



step4:



step5:


step6: 选择要用到的表同事选择报表中要显示的字段。

 

step7: 在报表中要显示的字段


step8: 这样我们就能设置表中显示的内容了。

本地报表处理期间出错?(VS2012自带报表的使用)_第3张图片

  设置完这各个字段对应的表头之后如果发现列不够?用可以右击—>插入列(靠左或者靠右)

还可以设置文本的属性都统统的在选中文本右击的插入中。需要的小伙伴请自行学习哦。这样报表模板就建立好了。

setp9:添加报表

  接下来我们回到窗体,添加报表并且选择报表。刚刚我们建立的报表名称叫report1.如果我们不需要从某个控件中传递参数的话,可以选择“在父容器中停靠”那样就将整个窗体占满了。视觉上可能也会更美观一下。


另外:让我们看一下我们的数据容器

  当我们建立dataset时,系统会自动添加一个tb_checkTableAdapter对数据操作的类,并且有Fill()GetDate() 两个方法双击那个库就进入了配置中


  然后在tb_CheckTableAdapter右击 就会出现添加查询和配置

Step10: 添加查询和配置

本地报表处理期间出错?(VS2012自带报表的使用)_第4张图片

step11添加查询


step12:



Step13:输入SQL语句

  可以在查询生成器中执行sql语句,以判断它是否成功的执行。也可以看到它的执行结果。

本地报表处理期间出错?(VS2012自带报表的使用)_第5张图片

那么问题来了,本地报表处理期间出错?你遇到过吗!


出现这个问题的原因?

  ♣出现这个错误大部分的原因就是连接数据源没有正确的连接。也就是在step10中连接数据库的sql语句并没有执行成功,所以在改正的时候我在sql语句执行中写进了我的sql语句:

  select * from CheckDay_info where CheckDate between @StartTime and @EndTime,点击执行查询,如果能查出来东西,证明数据库连接是没有问题的。所以就可以进行后期代码的书写了。

    ♣另外一个原因传参,各种数据集名,数据源以及各种参数并没有写对,那样很容易就出错了。那正确的应该是什么样的呢?

解决方法


  我更改之后的程序是这样写的,略微的有点不一样,如果有什么错误 还请各位大神提点~。说一下思路,因为我的fill()方法叫做FillBy(),但是在输入CheckDay_infoTableAdapter方法之后无论如何也点不出来这个方法,所以就找到了上面步骤10,然后查看它的配置,以及数据集名称,设置数据源实例。它的名字在上面的问题那一版代码中写错了,应该是CheckDay_infoBindingSource,然后再通过下面的sql语句查询,确定能查出来内容,这样基本上就没有问题了。

  另外一个错是因为报表的fill方法只能传入一个参数,所以当我们写入两个参数的时候就会报错:传入的参数值过多。这个错误在以上问题得到解决的同时也就完美的解决了。是不是心情很愉悦?

Imports System
Imports Microsoft.Reporting.WinForms
Public Class frmWeekCheck

    Private Sub frmWeekCheck_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: 这行代码将数据加载到表“chargeDataSet.CheckDay_info”中。您可以根据需要移动或删除它。
        Me.CheckDay_infoTableAdapter.Fill(Me.chargeDataSet.CheckDay_info)
        Me.ReportViewer1.RefreshReport()  '自动生成
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim myList As List(Of Model.CheckDayModel)
        Dim checkFac As New Facade.CheckDayFacade
        Dim checkday As New Model.CheckDayModel

        checkday.CheckDate = dtpStartTime.Value.ToString("yyyy-MM-dd")
        checkday.CheckEndDate = dtpEndTime.Value.ToString("yyyy-MM-dd")
        myList = checkFac.SelectDate(checkday)
        If myList IsNot Nothing Then
            Dim rptDateSource = New ReportDataSource
            '定义数据集名称
            rptDateSource.Name = "CheckWeekDataSet1"
           '设置数据源实例
            rptDateSource.Value = CheckDay_infoBindingSource
            '说明reportViewer 承载的表名
            ReportViewer1.LocalReport.ReportEmbeddedResource = "UI.CheckWeekReport1.rdlc"
            '清空存在报表
            Me.ReportViewer1.LocalReport.DataSources.Clear()
            '添加报表数据源
            Me.ReportViewer1.LocalReport.DataSources.Add(rptDateSource)
            '定义报表参数,两个参数。
            Me.CheckDay_infoTableAdapter.FillBy(Me.chargeDataSet.CheckDay_info, 
                                                Format(dtpStartTime.Value, "yyyy-MM-dd"),
                                                 Format(dtpEndTime.Value, ("yyyy-MM-dd")))
            Me.ReportViewer1.RefreshReport()
        End If
    End Sub
End Class


  ●总结:

  在进行了这一系列的查询和配置之后,终于弄明白了数据集和表名,报表终于不再出错。美美哒~博客有点长,但都是干货。如有不妥之处还望大神提点~

感谢您宝贵的时间~


你可能感兴趣的:(本地报表处理期间出错?(VS2012自带报表的使用))