VS2015版本并没有报表这一说,这就让我这个小白在用2015之后才知道这个不是秘密的秘密。然而机房重构有报表的功能啊,询问师傅之后,得到的结论是:得做,不做不能过。然后小编毅然决然的安装了更低的版本,VS开发人员怎么想的呢?高版本竟然没有低版本有的报表??再说一下wuli机房收费系统吧,改善完报表的功能之后就基本可以跑起来了。从2016年2月到5月,整整跨过了三个月,这中间的辛酸,不说想必大家也知道。经历了那么多的错误,无论是别人给调出来的还是自己弄出来的,总归是学到了。下面的一个错误真是让人又头疼又感叹。路漫漫其修远兮,吾将上下而求索。
·数据源就是我们建立的数据库中的表,我们想要显示的哪张表中的内容。
设置完这各个字段对应的表头之后如果发现列不够?用可以右击—>插入列(靠左或者靠右)
还可以设置文本的属性都统统的在选中文本右击的插入中。需要的小伙伴请自行学习哦。这样报表模板就建立好了。
接下来我们回到窗体,添加报表并且选择报表。刚刚我们建立的报表名称叫report1.如果我们不需要从某个控件中传递参数的话,可以选择“在父容器中停靠”那样就将整个窗体占满了。视觉上可能也会更美观一下。
当我们建立dataset时,系统会自动添加一个tb_checkTableAdapter对数据操作的类,并且有Fill()和GetDate() 两个方法双击那个库就进入了配置中
然后在tb_CheckTableAdapter右击 就会出现添加查询和配置
♣出现这个错误大部分的原因就是连接数据源没有正确的连接。也就是在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
在进行了这一系列的查询和配置之后,终于弄明白了数据集和表名,报表终于不再出错。美美哒~博客有点长,但都是干货。如有不妥之处还望大神提点~
感谢您宝贵的时间~