现在的位置: 首页 > 综合 > 正文

在WPF中使用水晶报表for vs2010的方法

2013年09月09日 ⁄ 综合 ⁄ 共 2284字 ⁄ 字号 评论关闭

1、首先下载安装水晶报表for vs 2010

2、新建wpf项目

3、在工具箱新建选项卡“水晶报表for vs2010”,在选择卡下添加水晶报表for vs2010提供的控件(程序集都以SAPBusinessObjects开头),其中包括CrystalReportsViewer控件。

4、需要注意的一点是,wpf项目所用的“目标框架”必须改成“.Net Framework4”,默认是".Net Framework 4 Client Profile",修改方法,在解决方案资源管理器中右击wpf项目名,选属性,在“应用程序”选项卡中的“目标框架”下拉列表中选".Net Framework 4 "。如果不改成.Net Framework 4 ,水晶报表for vs2010提供的控件在运行时将不可用,报错。

以上准备工作已完成。

接下来分pull和push两种模式简要说明一下在wpf项目中水晶报表for vs2010的用法。

1、pull模式

     将水晶报表for vs2010提供的CrystalReportsViewer控件拖到wpf窗体上,然后添加水晶报表,和在winform中的pull模式用法操作一样,设置水晶报表的数据源。假设水晶报表名为CrystalReport1,在wpf窗体的Window_Loaded事件处理函数中首先实例化该水晶报表包装类(即CrystalReport1),代码如下:

CrystalReport1 rpt=new CrystalReport1();

然后将CrystalReportsViewer控件的报表数据源设置成rpt,假设CrystalReportsViewer的名为crystalReportsViewer1如下:

crystalReportsViewer1.ViewerCore.ReportSource = rpt;

完成,运行即可。

2、push模式

     同样将CrystalReportsViewer控件拖到wpf窗体上,之后添加数据集即.xsd文件,打开数据集文件,添加要在报表上显示的数据表结构(注意表名要与数据库表同名,字段也要一样),然后生成项目(F6)(此步相当重要,否则等下添加水晶报表时找不到刚才添加的数据集).

然后添加水晶报表,水晶报表数据源选择为“标准报表创建向导”下的“可用数据源”中的“项目数据”下的“ADO.NET数据集”下的刚才添加的数据集下的表。完成水晶报表的添加。

之后在wpf窗体的Window_Loaded窗体加载事件处理函数中添加如下代码:

  SqlConnection conn = new SqlConnection("此处为数据库连接字符串");
  SqlDataAdapter sda = new SqlDataAdapter("此处为sql语句",conn);
  DataSet1 ds1 = new DataSet1(); //DataSet1即为刚才添加的数据集名称
  sda.Fill(ds1.UserInfo); //UserInfo即为刚才在DataSet1数据集中添加的数据表名称

  CrystalReport1 rpt = new CrystalReport1(); //将报表作为嵌入式报表,实例化
  SetDBLoginInfo(rpt); //在将报表显示在CrystalReportsViewer控件之前设置水晶报表连接数据库的信息,具体函数在下面
  crystalReportsViewer1.ViewerCore.ReportSource = rpt; //将报表rpt在CrystalReportsViewer控件中显示

 

private void SetDBLoginInfo(CrystalReport1 report) //CrystalReport1 是刚才添加的水晶报表名称,在这里作为一个包装类
        {
            CrystalDecisions.Shared.ConnectionInfo connInfo = new CrystalDecisions.Shared.ConnectionInfo();

          //这个函数的作用是为了避免每次生成报表或刷新界面时都弹出一个对话框让输入数据库连接信息
            connInfo.DatabaseName = "Test"; //数据库名称
            connInfo.UserID = "sa"; //用户名
            connInfo.Password = "sa"; //密码

            CrystalDecisions.CrystalReports.Engine.Tables tables = report.Database.Tables;
            foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables)
            {
                CrystalDecisions.Shared.TableLogOnInfo logOnInfo = table.LogOnInfo;
                logOnInfo.ConnectionInfo = connInfo;
                table.ApplyLogOnInfo(logOnInfo);
            }
        }

更多ConnectionInfo 的信息可参考MSDN

说明:有些地方需要使用using来导入命名空间,这些都很简单,不再说明。

抱歉!评论已关闭.