多语言展示
当前在线:693今日阅读:84今日分享:32

详解在wpf中使用reportviewer,数据源为对象

在WPF程序中加入简单的图表显示时,考虑到WINFORM中有ReportViewer的控件,如果能够直接使用,不添加第三方控件的话,会比较理想。在微软网站上,检索到演练1:在WPF 应用程序中使用 ReportViewer,网址为https://msdn.microsoft.com/zh-cn/library/hh273267.aspx,描述的是使用AdventureWorks2008R2 示例数据库显示本地报表,即在ReportViewer中显示数据库中的相关数据表。 与我的需求不太相关,我需要对本地的对象进行操作,于是有检索到演练2:在本地处理模式下将业务对象数据源与 ReportViewer Windows 窗体控件一起使用,网址为:https://msdn.microsoft.com/zh-cn/library/ms251784.aspx,演示如何在 Microsoft Visual Studio Windows 窗体应用程序(winform)的报表中通过业务对象使用对象数据源。此经验中,将上述两者进行了整合,得到了在wpf中使用reportviewer,数据源为对象的软件实例。
工具/原料

VS2013Ultimate.update.4

方法/步骤
1

使用 WPF 应用程序中的 ReportViewer(1)在“文件”菜单中,指向“新建”,然后选择“项目”。(2)在“添加新项目”对话框中选择“WPF 应用程序”项目类型,对项目命名,然后单击“确定”。(3)从工具箱中,将 “WindowsFormsHost” 控件拖到“MainWindow.xaml”设计图面上。 这通过 WindowsFormstHost 将所需的程序集添加到您的项目。(4)在“解决方案资源管理器”中,右击项目并选择“添加引用”。(5)在“添加引用”对话框中的“.NET”选项卡下,选择 Microsoft.ReportViewer.WinForms 程序集,然后单击“确定”。 此过程中,我遇到了问题:我在操作过程中,没有找到“.NET”选项卡,也没有找“Microsoft.ReportViewer.WinForms 程序集”,是否与程序设置等相关,我未找到原因。我添加引用时是如下窗口:搜索不到Microsoft.ReportViewer.WinForms 程序集。 解决过程:(5.1)我按照参考资料中演练2的说明,在winform中添加了reportviewer控件之后,在引用中出现了:Microsoft.ReportViewer.WinForms ,查看属性中的路径,得到dll文件地址:C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WinForms\11.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.WinForms.dll(5.2)将其拷贝出来,回到wpf项目,通过“添加引用”功能,进行“浏览”,直接添加dll文件。 结果:能够添加,但是添加完成后,再次出现问题:“警告 2 未能解析此引用。未能找到程序集“Microsoft.ReportViewer.WinForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。  解决过程:首先,在网上寻找12.0版本的Microsoft.ReportViewer.WinForms无果,转而考虑是否是vs自身版本的问题,于是将vs2013ultimate升级到update4。 期间,遇到安装巨慢,卡死的问题,网上有人说断网安装就可以,于是解决了。 升级完成后,“浏览”,添加,可以正常使用。  (6)在 XAML 视图中,添加以下斜体显示的行:XAML              这将在 XAML 页上创建名为 _reportViewer 的 ReportViewer 实例。

2

创建要用作数据源的业务对象(1)从“项目”菜单中选择“添加新项”。(2)在“添加新项”对话框中,选择“类”,键入文件名“BusinessObjects.cs”,然后单击“添加”。(3)新文件将添加到项目并且在 Visual Studio 中自动打开。将 BusinessObjects.cs      的默认代码替换为以下代码:C#using System;using System.Collections.Generic; // Define the Business Object 'Product' with two public properties//    of simple datatypes.public class Product {    private string m_name;    private int m_price;     public Product(string name, int price) {        m_name = name;        m_price = price;    }     public string Name {        get {            return m_name;        }    }     public int Price {        get {            return m_price;        }    }} // Define Business Object 'Merchant' that provides a//    GetProducts method that returns a collection of//    Product objects. public class Merchant {    private List m_products;     public Merchant() {        m_products = new List();        m_products.Add(new Product('Pen', 25));        m_products.Add(new Product('Pencil', 30));        m_products.Add(new Product('Notebook', 15));    }     public List GetProducts() {        return m_products;    }} (4)从“项目”菜单中,选择“生成解决方案”。 这将为对象创建一个程序集,您稍后会将此程序集用作报表的数据源。

3

使用报表向导向项目添加报表     (1)从“项目”菜单中选择“添加新项”。在“添加新项”对话框中,选择“报表向导”。 为报表键入名称,并单击“添加”。(2)这将启动报表向导中的数据源配置向导。(3)在“选择数据源类型”页上,选择“对象”,并单击“下一步”。(4)在“选择数据对象”页中的“BusinessObject”下,展开类的层次结构,直到在列表中看到“产品”。 选择“产品”,再单击“完成”。(5)现在已返回到“报表向导”。 请注意,新数据源对象已添加到“解决方案资源管理器”中的项目中。(6)在“数据集属性”页中的“数据源”框中,确认选中“全局”。(7)在“可用数据集”框中,确认选中“产品”。(8)单击“下一步”。(9)在“排列字段”页中,执行以下操作:将“名称”从“可用字段”拖到“行组”框。将“价格”从“可用字段”拖到“值”框。(10)单击两次“下一步”,然后单击“完成”。这将创建 .rdlc 文件并在报表设计器中将其打开。 所创建的 tablix 会立即显示在设计图面中。保存 .rdlc 文件。 (11)我在rdlc中,添加了一个图表,从图中可以看出参数添加的方法,过程不再详述。

推荐信息