水晶报表

水晶报表

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:Visual Studio 2015

作者:李成富

撰写时间:2019年6月20日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

一、创建数据集

二、创建(调用)水晶报表

三、WPF打印不可以直接打印出水晶报表,需要借用XAML的一个窗口,然后通过引用进来的插件把水晶报表插入到XAML页面上,然后添加引用xmlns:view="clr-namespace:SAPBusinessObjects.WPF.Viewer;assembly=SAPBusinessObjects.WPF.Viewer"

最后加入控件:<view:CrystalReportsViewer x:Name="CRV_Staff" Height="680" Width="950" />这个控件可以直接装载水晶报表。XAML布局完后,就可以到C#编程了。

C#编程:

  1. 首先引用方法,把涉及到的基本数据先传递过来,引用服务端

//1.0 实例化命名空间

 BLL.SystemInformation.UC_Staff.UC_StaffClient myClient = new BLL.SystemInformation.UC_Staff.UC_StaffClient();

  1. 接下来就要把水晶报表加载进来,要实现水晶报表打印的话,页面显示的内容在水晶报表里面,但是传递的数据在数据集里面,而要合并的话是在XAML里面,所以要把这是三个关联起来。所以有三个步骤:获取数据、合并数据集(给数据集表格赋值)和绑定窗口控件。在步骤获取数据中,要获取页面传递过来的数据、读取图片(如果有图片的话),还有创建临时表格数据

private void Window_Loaded(object sender, RoutedEventArgs e)

{

            #region 1、获取数据

 

            #region (1)、获取页面传递过来的数据

           //获取传递过来的员工ID

            int staff_id = Convert.ToInt32(drvstaff.Row["staff_id"]);

            //创建临时数据表格dt1保存基本数据

            DataTable dt1 = myClient.btn_Print_Staff(staff_id).Tables[0];

            //提取图片名称

            string strpicture = dt1.Rows[0]["picture"].ToString().Trim();

            #endregion

 

            #region (2)、读取图片

            try

            {

                //获取图片路径

                strload = myClient.btn_Select_UC_StaffPhoro(strpicture);

                //IO流读取图片

                        FileStream filstream = new FileStream(strload, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                //IO流转换为byte[]

                bytes = new byte[filstream.Length];

                //从流中读取字节块并将该数据写入给定缓冲区中。

                filstream.Read(bytes, 0, bytes.Length);

            }

            catch (Exception)

            {

                throw;

            }

            #endregion

 

           #region (3)、创建临时表格数据

            //实例化数据表

            DataTable dt = new DataTable();

            //给数据表创建对象

            dt.Columns.Add("picture", typeof(byte[]));

            //新建行

            DataRow myDataRow = dt.NewRow();

            //给单元格赋值:把读取的图片添加到数据行里面

            myDataRow["picture"] = bytes;

            //给数据表添加行数据(获取图片)

            dt.Rows.Add(myDataRow);

            #endregion

 

            #endregion

 

            #region 2、合并数据集(给数据集表格赋值)

            //实例化数据集

            TrainDS myTrain = new TrainDS();

                   //把数据集和表格合并(给数据集绑定数据)

            myTrain.Tables["t_staff"].Merge(dt1);

            myTrain.Tables["t_picture"].Merge(dt);

 

            #endregion

 

            #region 3、绑定窗口控件

            //实例化水晶报表

            CRY_Staff myCRY_Staff = new CRY_Staff();

            //给水晶报表设置数据集

            myCRY_Staff.SetDataSource(myTrain);

                   //打开第三方控件(绑定数据)

            CRV_Staff.ViewerCore.ReportSource = myCRY_Staff;

            #endregion

}

 

需要用到的引用有以下几个:

  1. CrystalDecisions.CrystalReports.Engine
  2. CrystalDecisions.ReportSource
  3. CrystalDecisions.Shared
  4. SAPBusinessObjects.WPF.Viewer
  5. SAPBusinessObjects.WPF.ViewerShared

前面三个是引用程序集里面的,后面两个是安装水晶报表路径下的,一般路径为C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet\SAPBusinessObjects.WPF.ViewerShared.dll

 

要在App.config里的Startup下加 useLegacyV2RuntimeActivationPolicy="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、付费专栏及课程。

余额充值