之前接触过一次使用 FastReport 制作报表。
下面,我就说明一下,如何实现。
工具网站:
1、试试吧| 图片转base64编码网站
https://try8.cn/tool/image/base642、docsmall | 图片压缩工具网站
https://docsmall.com/image-compress
1、FastReport
① 打开FastReport 软件,然后新建项目,建完后如下图所示。
② 先选择 右侧 Actions 保存一个字典到,方便写数据格式。
Actions --> Save Dictionary
③打开保存的文件 Dictionary.frd(名称默认),里面内容默认是这样的,然后手动补充内容。
示例: ReferenceName 属性必须要加
代码:
<?xml version="1.0" encoding="utf-8"?>
<Dictionary>
<TableDataSource Name="baseInfo" ReferenceName="Data.baseInfo" DataType="System.String" Enabled="true">
<Column Name="patName" DataType="System.String"/>
<Column Name="patSex" DataType="System.String"/>
<Column Name="patAge" DataType="System.String"/>
<Column Name="inCode" DataType="System.String"/>
<Column Name="outCode" DataType="System.String"/>
<Column Name="imageCode" DataType="System.String"/>
<Column Name="regId" DataType="System.String"/>
<Column Name="deptName" DataType="System.String"/>
<Column Name="bedName" DataType="System.String"/>
<Column Name="checkItem" DataType="System.String"/>
<Column Name="imageDecribe" DataType="System.String"/>
<Column Name="imageDiagnose" DataType="System.String"/>
<Column Name="suggest" DataType="System.String"/>
<Column Name="checkDoctor" DataType="System.String"/>
<Column Name="reportDoctor" DataType="System.String"/>
<Column Name="memo1" DataType="System.String"/>
<Column Name="memo2" DataType="System.String"/>
<Column Name="memo3" DataType="System.String"/>
<Column Name="memo4" DataType="System.String"/>
<Column Name="memo5" DataType="System.String"/>
</TableDataSource>
</Dictionary>
④打开FastReport软件,进行导入字典。
Actions --> Open Dictionary
导入后,就出现刚才定义的表名。
⑤ 然后就按照自己的想法,拖字段布局了。
如果涉及到图片,就直接把图片控件放到相应的位置,然后下面补充了如何去实现数据绑定。
补充:图片怎么配置,能让其显示
双击,就会自动转到代码区。填写以下代码:
private void Picture2_BeforePrint(object sender, EventArgs e)
{
string imgStr = (string)Report.GetParameterValue("imageCheck");
if (string.IsNullOrEmpty(imgStr))
{
Picture2.Visible=false;
return;
}
byte[] imgData=Convert.FromBase64String(imgStr);
MemoryStream ms = new MemoryStream(imgData);
Image img = System.Drawing.Image.FromStream(ms);
Picture2.Image=img;
}
图片,在代码区,一定一定一定要检查有没有引用:。不加这个,就会报错,提示:
Error CS0246: 未能找到类型或命名空间名称“MemoryStream”(是否缺少 using 指令或程序集引用?)
在数据库里面,图片数据是以 base64编码,存储的。以下面为例,在C# 中,只需要把 imgBaseInfo 传进去就可以。请联合文末最后代码查看。
string baseChkString = "数据库里面的base64编码";
// 报表传输base64即可
string imgBaseInfo= baseChkString.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");
⑥ 最后效果展示
以上就是报表部分全部完成了,接下来就是在程序里面如何去调用。
2、C# WinForm
①在项目中引入这3个dll文件 + Aspose.PDF
②引入控件
工具箱 --> 添加选项卡(aaa) -->选择项-->浏览(选择FastReport.dll)-->确定
然后找到这个控件:,放到窗体里面。如下图所示:
③创建文件夹
在项目Debug 文件下,新建一个文件夹,里面放那个报表模板文件( 扩展名 .frx)
④编写代码
public void test(BaseInfo baseInfoEntity)
{
// 创建数据表,定义报表字段
DataSet data = new DataSet();
DataTable dtt = new DataTable();//创建表
dtt.TableName = "baseInfo";
dtt.Columns.Add("patName", typeof(String));//添加列
dtt.Columns.Add("patSex", typeof(String));//添加列
dtt.Columns.Add("patAge", typeof(String));
dtt.Columns.Add("inCode", typeof(String));
dtt.Columns.Add("outCode", typeof(String));
dtt.Columns.Add("imageCode", typeof(String));
dtt.Columns.Add("regId", typeof(String));
dtt.Columns.Add("deptName", typeof(String));
dtt.Columns.Add("bedName", typeof(String));
dtt.Columns.Add("checkItem", typeof(String));
dtt.Columns.Add("imageDecribe", typeof(String));
dtt.Columns.Add("imageDiagnose", typeof(String));
dtt.Columns.Add("suggest", typeof(String));
dtt.Columns.Add("memo1", typeof(String));
dtt.Rows.Add(new object[] { baseInfoEntity.patName,
baseInfoEntity.patSex,
baseInfoEntity.patAge,
baseInfoEntity.inCode,
baseInfoEntity.outCode,
baseInfoEntity.imageCode,
baseInfoEntity.regId,
baseInfoEntity.deptName,
baseInfoEntity.bedName,
baseInfoEntity.checkItem,
baseInfoEntity.imageDecribe,
baseInfoEntity.imageDiagnose,
baseInfoEntity.suggest,
baseInfoEntity.memo1
});//添加行
//DataView dv = dt.DefaultView;//获取表视图
data.Tables.Add(dtt);
//string baseString = textBox1.Text.ToString();
try
{
FastReport.Report report = new FastReport.Report();
// 检索 Debug\report\Untitled.frx 文件
string filename = @"report\Untitled.frx";// Untitled.frx
report.Load(filename);
report.Preview = this.previewControl1;//让报表显示在窗体的控件中
// 其他数据:data
report.RegisterData(data);
// 图片数据:这个名称,写报表模板里面,自己定义的名称。
report.SetParameterValue("imageMake", baseInfoEntity.checkDoctor);// 生成显示图片
report.SetParameterValue("imageCheck", baseInfoEntity.reportDoctor);// 生成显示图片
report.SetParameterValue("imageIcon", baseInfoEntity.memo2);// 生成显示图片
report.Prepare();
report.ShowPrepared();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
最后,效果如图所示:
如有不足,还请多多包涵,希望可以帮助到别人 😊。