文章目录
前言
应用场景:在做一个巡检机器人项目时,对于巡检结果,需要在Winform端显示巡检报告,报告中有图片。开始想到的是用DataGridView控件去实现,确实也能够将图片显示出来,但是分辨率和导出来的来的效果,简直就是惨不忍睹。后面想到还有reportview这个玩意,就琢磨了一下,下面就将过程中的一些坑和实现步骤给大家分享一下。
一、VS中找不到ReportView
1.方法一:
在VS中选择工具——Nuget包管理器——程序包管理器控制台
执行命令:Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms -Pre
然后在VS的工具——选择工具箱项——.NetFramework下,选择“浏览”,然后在工程根目录下的“\packages\Microsoft.ReportingServices.ReportViewerControl.Winforms.xx\lib\net40”目录下选择“Microsoft.ReportViewer.WinForms.dll”文件(其中xx代表Microsoft.ReportingServices.ReportViewerControl.Winforms.140.1000.523后面的数字)。
2.方法二:
如果方法一不行,就在控制面板中选择VS,点击更新
勾选上以下三个选项,安装即可。
二、使用步骤
1.直接拉取控件到窗体
拖入窗体后,右上角“设计新报表”
数据源处点击新建
选择数据库--数据集
填入你需要连接数据库的信息
选择你需要显示的表格
点击下一步
将你想显示到报表的字段拖到这里来,不然自己新建太麻烦了。
新建完成之后就是这个样子,可以手动修改表头的名称
下一步
回到窗体,选择报表
2.添加参数
第一步 首先给自己的rdlc报表自定义参数,在视图找到Report Data 菜单 ,当然这个菜单 笔记本的不容易找到,点 视图 用滚轮 一直往下滚,最下面才是Report Data 菜单,点中参数,右键添加参数。
第二步 在rdlc报表上添加参数,图像源为外部,具体见图片
3.后台代码
/// <summary>
/// 刷新巡检报告
/// </summary>
/// <param name="AddSql"></param>
public void ShowReport(string AddSql)
{
string Err = "";
try
{
DataTable Dt = bllPublic.GetDataTable("T_AGV_InspectReport", AddSql, ref Err).dt;
reportViewer1.LocalReport.EnableExternalImages = true;//这个不设置为True会报错
ReportDataSource rds = new ReportDataSource("DSTest", Dt);
reportViewer1.LocalReport.ReportPath = "Report1.rdlc";
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.ZoomPercent = 120;
for (int i = 0; i < Dt.Rows.Count; i++)
{
reportViewer1.LocalReport.SetParameters(new ReportParameter("HWEWM", "file:///" + Dt.Rows[i]["HWPicPath"].ToString()));//报表绑定参数
reportViewer1.LocalReport.SetParameters(new ReportParameter("HKEWM", "file:///" + Dt.Rows[i]["HKPicPath"].ToString()));//报表绑定参数
}
reportViewer1.LocalReport.DataSources.Add(rds);
reportViewer1.RefreshReport();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
感觉是没啥问题了,能正常显示出来如图:
怕有的伙伴疑问,我顺便贴一下我数据库表内容
主要的难点就是由字符串(路径)去显示成本地的图片 。
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了水晶报表的使用,如有错误的地方或不好的地方,请各位不吝赐教。