前言:
报表这部分在16年8月份结束机房合作项目的时候被遗留下来一直没有解决好,也没有总结,直到年前验收的时候又一次相遇,现在它终于在经过“两年的奔波之后安全着陆”,赶紧收藏起来。
这次弄这个报表花了不少时间,也站在巨人的肩膀上折腾了很久~~~(*^__^*) ,今天在我将要放弃的时候,又坚持了一下,终于弄出来了,还是很开心的。印证了一句话,千万别在黎明前放弃,嘻嘻。
步骤:
1、创建窗体
首先创建相应的窗体,然后在工具箱中把报表控件拖到窗体中。
同时也将日期控件拖到窗体上,最后的界面如下。
2、创建报表
创建后的界面:
右侧解决方案中出现了“Report1.rdlc”这一项,窗体中出现空白报表。
添加表:
在空白报表上单击右键,添加表
出现如下界面:
添加表头和数据:
表添加成功后,再添加对应的表头和数据,列数可以根据自己的需要添加和删除,同时表头也可以根据需要改成中文。
简单效果:
3、报表控件的配置
选中reportViewer控件,点击右上角的小三角,选择上一步创建好的报表“Report1.rdlc”。
这时窗体下面会出现如下三个:
注:如果只出现了前两个,则说明选择报表时没有自动选择数据源,这时要自己手动添加对应的数据源,如下。
在选择数据源实例时,要注意不要只选中数据集,而是要选到具体的表,否则在后面的代码部分将点不出对应的Fill()方法。
绑定好之后,进行进一步的配置:
点击在数据集设计器中编辑查看后,出现下面的界面。右击Fill,GetData()进行配置操作。
点击配置后,出现配置向导界面,再点击‘查询生成器’按钮。
出现如下界面,可以根据需要勾选自己所需的字段,同时也可以在sql语句处添加where条件。
4、代码实现
using Microsoft.Reporting.WinForms; //引用
private void Form1_Load(object sender, EventArgs e)
{
this.reportViewer1.RefreshReport();
}
private void btnCheck_Click(object sender, EventArgs e)
{
//获取日期控件的参数
string strBegin = dtpBeginTime.Value.ToShortDateString();
string strEnd = dtpEndTime.Value.ToShortDateString();
//实例化
ReportDataSource rptDataSource = new ReportDataSource();
//设置报表数据源名称
rptDataSource.Name = "DataSet1";
//设置报表数据源实例
rptDataSource.Value = T_CheckOutBindingSource;
//获取或设置嵌入报表的资源的名字
this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";
//清空报表
this.reportViewer1.LocalReport.DataSources.Clear();
//添加数据源
this.reportViewer1.LocalReport.DataSources.Add(rptDataSource);
//传递参数
this.T_CheckOutTableAdapter.Fill(Co_JF_ChargeSystemDataSet.T_CheckOut,strBegin ,strEnd);
//刷新报表
this.reportViewer1.RefreshReport();
}
5、效果
总结:
在整个过程中,我用的是通过绑定获取数据的方法,代码编写比较简单。但再前期的报表的创建和配置的过程中,我认为容易出错的地方是报表控件的配置过程,还有在sql语句写where条件时,注意前后参数的名称的一致性,各种错误的有可能出现,如:本地报表处理期间出错,尚未为数据源DataSet1提供数据实例等,耐心和细心是比较重要的,同时注意代码编写的过程数据源名称,实例等地方的赋值要与前面的配置时所起的名字对应。