WPF水晶报表打印

在之前我有写过一篇MVC版的水晶报表打印,这次我写的是WPF版的水晶报表打印
一、制作水晶报表(由于这次制作的过程跟上次不太一样,所以我会重新制作一遍,大概的步骤还是一样的)
右键——>添加——>新建项
在这里插入图片描述
选择一个类似小鸟的,命名,添加
在这里插入图片描述
这是打印后的成果
在这里插入图片描述
右键——>添加——>新建项——>数据——>数据集,
在这里插入图片描述
由于图片有点特殊,所以我们单独给它一个数据集(图片picture是byte类型);在以前的水晶报表中,是右键空白处——>添加——>DataTable,而现在在这里是点击第一个的(TableAdapter),点击之后自动弹出一个框(步骤如下)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终创建的两个数据集
在这里插入图片描述
这就是和以前水晶报表打印不同的地方(导入数据集的地方不同)
接下来就是代码的演示了
二、新创建一个负责打印的页面(由于水晶报表不能直接引用,所以我们需要借鉴水晶报表自带的两个插件)
在这里插入图片描述
在新建的页面引用水晶报表的插件

xmlns:view="clr-namespace:SAPBusinessObjects.WPF.Viewer;assembly=SAPBusinessObjects.WPF.Viewer"

在新建的页面调用水晶报表

 <view:CrystalReportsViewer x:Name="CRP_Staff" Height="680" Width="950"></view:CrystalReportsViewer>  

三、先在数据库的存储过程里编写代码(没什么特别的,只需要把要查的数据查出来即可)

SELECT RTRIM(t_staff.staff_name) AS staff_name,
	 RTRIM(t_staff.staff_number) AS staff_number,
	 RTRIM(t_detailed_attribute_gather.detailed_attribute_gather_name) AS employee_type,
	 RTRIM(t_detailed_attribute_gather_1.detailed_attribute_gather_name) AS branch,t_staff.picture		
FROM  t_staff INNER JOIN t_detailed_attribute_gather ON
	t_staff.as_employee_type_id=t_detailed_attribute_gather.detailed_attribute_gather_id INNER JOIN
      t_detailed_attribute_gather AS t_detailed_attribute_gather_1 ON
	t_staff.as_branch_id=t_detailed_attribute_gather_1.detailed_attribute_gather_id
WHERE t_staff.staff_id=@staff_id

四、在服务器service里调用数据库的存储过程

SqlParameter[] SQLCMDpas =
   {
       new  SqlParameter ("@type",SqlDbType.Char),
       new  SqlParameter ("@staff_id",SqlDbType.Int),
   };
   SQLCMDpas[0].Value = "UserControl_Loaded_SelectWorkZheng";
SQLCMDpas[1].Value = intStaffID;
DataTable myDataTable = myDALMethod.QueryDataTable("UC_StaffInformation", SQLCMDpas);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;

五、在新建页面的后台写代码(需要把三种不同的东西关联:页面显示的东西在水晶报表,显示数据的在数据集,页面合并在窗口)
1、获取数据
(1)获取页面传递过来的数据

在这里插入图片描述
(2)读取图片
在这里插入图片描述
(3)创建临时表格数据
在这里插入图片描述
2、合并数据集
在这里插入图片描述
3、绑定窗口控件
在这里插入图片描述
六、在主页面的客户端引用服务器的证书打印

if ((DataRowView)dgStaff.CurrentItem != null)
{
   //实例化窗口
   ReportForms.WD_Staff myWD_Staff = new ReportForms.WD_Staff((DataRowView)dgStaff.CurrentItem);
   myWD_Staff.ShowDialog();//弹出窗口
}
else
 {
    MessageBox.Show("请选择要打印工作证的员工信息!");
 }

七、在执行打印按钮的时候会报一个错
在这里插入图片描述
所以我们需要在App.config这里更改一下(找到startup,在后面加个userLegacyV2RuntimeActionPolicy=”true”即可)

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>

打印证书的结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值