【问题标题】:Create RDL(C) with WCF datasource for ASP.NET MVC2 using Visual Studio 2010?使用 Visual Studio 2010 为 ASP.NET MVC2 创建带有 WCF 数据源的 RDL(C)?
【发布时间】:2012-03-06 00:51:08
【问题描述】:

我们有两个 C# 应用程序,一个提供多个 WCF Web 服务,另一个是 MVC 2 Web 应用程序,使用它们。我们计划让 Web 应用程序使用 WebForms ReportViewer 基于 Web 服务上的现有或新操作提供大量报告。我们需要使用报表设计器工具——用于 RDLC 文件的工具就可以了。我们正在使用 VS 2010 并部署到 Azure。

我花了几天时间寻找一种方法来做到这一点,但没有太大进展。

似乎有两种方法可以做到这一点:

  1. 在本地模式下使用 ReportViewer - 创建 RDLC 作为 Web 应用程序的一部分并使用本地数据源,来自 Web 服务的 XML 源或属于 Web 应用程序一部分的对象(可能来自客户端在将 Web 服务作为 Web 引用添加到项目时创建)。

  2. 让 ReportViewer 显示来自 SSRS 报表服务器的报表。看起来 RDL 可以有 XML 数据源,包括 WCF 服务。

第一个会更简单,尤其是因为我不确定我们是否需要额外的基础设施来设置报表服务器以满足其他要求。但我根本无法连接到 XML 或对象数据源。

除了增加的基础设施之外,第二种方式似乎还有许多问题:我还没有让 XML 连接在这里工作,但似乎更多的阅读和反复试验应该能让我到达那里.此外,我找不到支持此类报表的 Visual Studio 2010 工具 - 您需要在 SQL Server Business Intelligence Development Studio 中创建它们。这是 VS 2008 的一种风格。因此,需要做一些重要的额外工作才能将此设置与 TFS 2010 一起使用,以便我们可以将我们的报告包含在版本控制、构建和部署中。

(还有将 WebForms 集成到 MVC 应用程序中的复杂性。但我认为这些是可以管理的)。

对于这些要求的其他方法的任何建议将不胜感激。 或者,如果您已经完成了这项工作,那么听听您的做法会很棒。

【问题讨论】:

    标签: wcf visual-studio-2010 asp.net-mvc-2 rdlc


    【解决方案1】:

    我能够在本地模式下使用 ReportViewer 并合理地满足我们的要求。我将描述如何执行此操作,以防任何查看此问题的人遇到类似问题。

    大纲:

    • 为报表创建一个数据访问对象。
    • 创建报告(RDLC 文件)。
    • 创建一个 WebForm 以使用 ReportViewer 显示报告
      控制。

    我花了一段时间才明白:创建报告有两个阶段,看起来非常相似,但目的不同。创建 RDLC 文件时,有一个“设计时”绑定到数据对象,允许您将报表控件(表、列表等)中的占位符与数据元素相关联。然后,稍后,当向 WebForm 添加 ReportViewer 时,会有另一个数据绑定将报表与数据对象的实例连接起来,以从中提取报表数据。

    我。创建数据访问对象。

    在下面的步骤 II.5 中,您需要选择该对象的命名空间。在这里,我也花了一段时间才意识到 Visual Studio 有一组预先确定的命名空间,你只需要在其中工作。幸运的是,其中之一是您的 MVC 项目的 Models 命名空间,这似乎是放置它的合乎逻辑的地方。实际上,我创建了一个子命名空间,MyProjectWebRole.Models.ReportModels,这对 Visual Studio 来说没问题。

    这是我的访问对象的概要:

    namespace MyProjectWebRole.Models.ReportModels
    {
        public class DataThing
        {
            public DataThing()
            {
            }
    
            public int ThingId{ get; set; }
            public decimal ThingCost { get; set; }
            public DateTime ThingAcquisitionDate { get; set; }
            public string ThingType { get; set; }
    
            public static IList<DataThing> GetEveryThing()
            {
    
                ServiceClient client = null;
                ThingsRequest request = null;
                ThingsResponse response = null;
                string errorID = "";
    
                IList<DataThing> things = new List<DataThing>();
    
                    client = new ServiceClient();
                    request = new ThingsRequest();
                    response = client.ThingsReport(request);
                }
    
                foreach (ResponseThing rt in response.Things)
                {
            DataThing theThing = new DataThing();
            theThing.ThingId = rt.Id;
            theThing.ThingCost = rt.Cost;
            theThing.ThingAcquisitionDate = rt.Date;
            theThing.ThingType = rt.Type;
                    things.Add(theThing);
                }
    
                if (client != null) client.Close();
                return things
            }
        }
    }
    

    ServiceClientThingsRequestThingsResponseResponseThing 是在您将 ServiceReference 添加到数据来源的 Web 服务时定义的。

    二。创建报告。 从项目文件夹的上下文菜单中:

    1. 点击“添加”->“新建项目...”
    2. 选择左侧窗格中设置的“报告”模板。
    3. 选择“报告”模板。新报告的设计图面随即出现。
    4. 从工具箱中拖动控件来设计报表。第一次 您拖动需要数据集的控件(表、矩阵、量规、 图表,列表)将打开数据集属性对话框:
    5. 选择数据源。“数据源”下拉菜单显示 可以在其中命名报表数据源的命名空间。选择一个 您在其中定义了数据访问对象。
    6. 选择数据集:“可用数据集”下拉列表包括所有 所选数据源命名空间中的适当方法。这 用于此目的的数据访问对象的方法应该是 选择之间。选择此报告所需的一个。数据 它提供的内容将显示在“字段”列表中。
    7. 配置触发数据集设置的报告控件。 所选数据集中的字段现在可以用作占位符 添加到报告中的控件元素。
    8. 通过包含和配置任何 需要其他报告控件。

    三。创建一个 WebForm 来显示报告。

    1. 创建 WebForm 后,添加一个 ScriptManager 控件(从 工具箱的 AJAX 扩展部分)。
    2. 将 ReportViewer 控件添加到 WebForm(来自 Reporting 工具箱部分)
    3. 在 WebForm 的设计视图中,单击 ReportViewer 控件 使其处于活动状态。
    4. 单击智能标记 打开“ReportViewer 任务”对话框。
    5. 打开“选择报告”下拉菜单并选择 RDLC 文件 上面设计的报告。
    6. 单击“选择数据源”打开“选择数据源”对话框。 您在第二部分创建和命名的数据集应列为 “报告数据源”,下面应该有一个下拉列表 “数据源实例”。
    7. 打开数据源的下拉菜单并单击 说“。
    8. 这将打开一个“数据源配置向导。单击 “对象”数据源图标,如果你愿意,给它一个更多 比提供的默认 ID 有意义的 ID。
    9. 这将为新对象打开一个“配置数据源”对话框 您刚刚创建的数据源。在“选择您的业务对象”中 下拉菜单,您将再次选择 MyProjectWebRole.Models.ReportModels.DataThing
    10. 单击“下一步”,然后选择“选择”选项卡。
    11. 再次,从您的业务对象中选择将提供的方法 要绑定到报表的数据。

    这就是全部。当您浏览到 WebForm 时,它应该查询 Web 服务并使用提供的数据填充报告。

    对此的任何补充和更正都非常感谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2014-12-01
      • 2011-03-07
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多