在之前我有写过一篇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>
打印证书的结果如下: