打印操作

打印操作

开发工具与关键技术:MVC
作者:熊琪 
撰写时间:2019年 5 月 2 日

大致的步骤是先安装叫Crystal Reports的一个编程软件,安装好后重新打开VS,如果你可以在添加新建项中看到有Reporting然后点击会出先一个带有小图标的编程语言那就证明你引入插件成功了,如图:
在这里插入图片描述
引入成功后添加文件夹添加完文件夹后在文件夹中创建以个数据集,然后添加表,这里可以通过两种方式添加,一个是TableAdapter,一个是DataTble,前者可以直接通过SQL查询来查询到需要的字段然后把它们复制,然后点击“下一步”,再点击“完成”,就可以添加一个表,添加表后,记得要把它们的字段类型设置好。

在这里插入图片描述

前者自动创建表,表中的字段来自SQL的查询,后者是自己字段一个个的添加。其他都差不多。
设置好这个后接着就是做报表,所以在这先创建一个模板才行,这里我们可以在文件夹这里,添加一个新建项,找到Crystal Reports,创建后会弹出一个提示框,这里我们选择空白的模板。
这里就选择到数据字段,右键选择数据库专家,弹出的窗体里面找到刚刚写的表,把它选定就可以了,数据库字段就会添加到选定的表。然后将你要打印的表样式对应这手动创建的表的字段一个个的对应画出来。
如图:
在这里插入图片描述
画出模板后到控制器写一个方法把IEnumerable类型的集合转化为DataTable类型,首先定义要返回的DataTable对象,然后用PropertyInfo保存列集合的属性信息数组,return dtReturn是做一个安全性的检查。做完安全性检查后就使用反射获取类型的属性信息。如果oProps是等于null,那就循环PropertyInfo数组,在这里要获取属性的类型。其中实例化的代码:
DataTable dtReturn = new DataTable();
// 保存列集合的属性信息数组
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn; 循环遍历集合,使用反射获取类型的属性信息
得到的数据类型为泛的话就写一个if语句去获取泛型类型的参数,
if判断写法:(colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>))

然后将类型的属性名称的属性类型作为DataTable的列的数据。
代码写法:
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
反射获取类型的属性信息后,新建一个用于添加到DataTable中的DataRow对象,再用一个foreach循环为DataRow中的指定列赋值最后将具有结果值的DataRow添加到DataTable集合中返回DataTable的对象。这个将IEnumerable类型的集合 转换为DataTable类型的方法。代码写发:
foreach (PropertyInfo pi in oProps)
{ //为DataRow中的指定列赋值
dr[pi.Name] = pi.GetValue(rec, null) == null ?
DBNull.Value : pi.GetValue(rec, null);
}
//将具有结果值的DataRow添加到DataTable集合中
dtReturn.Rows.Add(dr); }
然后将DataTable对象返回,return dtReturn;
最后将需要显示的字段从数据库表中查询出来,如图:
在这里插入图片描述
然后分五步完成打印,第一、实例化数据集
第二、将dt的数据放入数据集的数据表中
第三、实例化下需要打印的模板。
第四、获取报表的文件地址。
第五、把报表文件加载到ReportDocument。并设置报表的数据源。
最后将ReportDocument转化为文件流。型代码如图:
在这里插入图片描述
控制中有关打印的方法就算写完了,最后一步就是在视图中写一个打印的点击事件
在这里插入图片描述
打印数据时,如果判断到打印的是全校的数据,因为全校的数据是很庞大的,最好给用户一个提示,当用户确认打印全校的数据时,打开一个新的页面显示的是打印数据表样式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值