【问题标题】:Issues Setting RDLC Datasource to Object将 RDLC 数据源设置为对象的问题
【发布时间】:2012-06-17 19:01:17
【问题描述】:

背景:

我的任务是将 Access 数据库应用程序转换为 ASP.Net C# MVC。这是我的第一个 MVC 应用程序。

有 10 份报告需要转换。我们正在使用 RDLC 文件和 reportviewer。我正在使用带有所有最新补丁的 Visual Studio 2010。我们正在连接一个由现有 Access 数据库填充的 SQL Server 数据库,因此表结构几乎是一成不变的,否则我们将不得不尝试转换 10 年的数据。

我已经完成了除两份报告之外的所有报告。最终报告需要更多处理,而不仅仅是显示数据库中的数据。最简单的方法是创建一个 C# 对象并在服务器端进行所有处理,然后使用 RDLC 显示结果。

问题

我遇到的问题是 Visual Studio 无法将我创建的对象识别为潜在的数据源。每次我尝试“添加数据集”时,它都会弹出“数据源配置向导”,并且只提供 SQL Server 数据库作为可能的数据连接。我知道有一个屏幕允许您选择一个对象作为您的数据集,但我从来没有看到那个屏幕。

以下是对象(为清楚起见,删除了处理函数):

public class TurnAroundVal
{
    // Registration Package information
    public string dataType { get; set; }

    // Calculated totals; values only set through constructor or calculation function
    public int packageCount { get; private set; }
    public int dayCount { get; set; }
    public double avgTurnAround { get; private set; }
    public int upperRange { get; private set; }
    public int lowerRange { get; private set; }
}

public class TurnAroundVals
{
    // Public Variables
    public IEnumerable<TurnAroundVal> TurnArounds { get; private set; }
    public DatePass dates { get; set; }
    public int pkgTotal { get; private set; }
    public double dayTotal { get; private set; }
    public double avgAllTurnArounds { get; private set; }
}

我也愿意将“TurnAroundVal”的 IEnumerable 用作数据源,并将日期、int 和 double 作为参数传入。两者都行。

问题

我在 Visual Studio 2010 中是否缺少允许 RDLC 设计器查看我创建的对象的设置? 我什至认为这将适用于我定义的类,我错了吗?

回答

给出的所有建议都很有帮助,但最终让它对我有用的是在同一解决方案中创建一个临时的非 Web 项目并在那里创建 RDLC。当我去添加一个数据集时,它显示“对象”作为一个选项。您必须添加对 Web 项目的引用,以便您的对象可见,然后您可以选择您想要的并在 RDLC 中使用它。之后,您只需将 RDLC 文件拖放到您的 Web 项目中,删除临时项目,就可以开始了。请记住,您必须在代码中手动添加数据源,并且它们的名称必须与您在 RDLC 中指定的名称相同。

【问题讨论】:

标签: c# asp.net-mvc reportviewer rdlc


【解决方案1】:
  1. 确保这些类与应用程序位于相同的命名空间中。
  2. 在创建报告之前尝试构建应用程序
  3. 启动报告向导。在 DataSouce 下选择您的 Web 应用程序的名称。
  4. 在可用数据集下,您应该看到 Visual Studio 解释为您的“选择方法”。如果一切顺利,这应该是 TurnArounds。

您可能需要将类文件放在 App_Data 或 App_Code 文件夹中,但我不确定。

这也可能有帮助。

http://msdn.microsoft.com/en-us/library/ms251692%28v=vs.100%29.aspx

【讨论】:

  • 已经尝试了所有这些,但它仍然是很好的信息。我最终做的是在同一个解决方案中创建一个新的非 Web 项目,在那里创建 RDLC,然后将其拖放到 Web 项目中。可能有一种不那么笨拙的方法,但这很有效。
【解决方案2】:

将您的对象设置在相同的命名空间下,但在不同的项目上,然后在您的 UI 项目中引用。

也尝试实现INotifyPropertyChanged

【讨论】:

    【解决方案3】:

    当您仅使用公共成员时,Visual Studio 无法识别您的类。当您改用 getter 和 setter 时,您可以在选择数据源时看到您的类。

    Visual Studio 中还有一些其他向导不适用于公共成员。

    干杯,马库斯

    【讨论】:

    • 你是说自动实现的属性不起作用?
    • 自动实现的属性是属性。他们应该工作
    【解决方案4】:

    我在 Visual Studio 2017 中尝试在 ASP.NET MVC 项目中创建 RDLC 报告时遇到了同样的问题,因此我将其添加为单独的答案显然这在 2018 年 1 月仍然是一个问题。

    我的解决方案由一个 C# 库项目和一个 MVC 客户端项目组成。

    在 C# 库项目中

    添加报告(通过选择添加新项目,然后选择报告向导项目)在 C# 库项目中调出带有数据源配置向导的报告向导(我可以在其中选择是否使用数据库、服务或对象作为数据源)以模态方式在其之上:

    然而,选择在MVC 项目中添加一个新的报表向导项只是打开了没有数据源配置向导的报表向导:

    我尝试将业务对象类添加到我的 MVC 项目中,重新编译它,然后再次向 MVC 项目添加一个报告,但我仍然得到第二个屏幕截图,所以看起来你只是没有得到数据源配置向导出于某种原因添加到 MVC 项目时。

    【讨论】:

    • 感谢您的更新。之后我换了工作,我们这里不使用RDLC,所以我没有及时了解情况。实现它似乎仍然是一种奇怪的方式,但它背后可能是有原因的。
    【解决方案5】:

    在没有报表向导的情况下,我能够在 VS 2017 中将对象添加为数据源。 [使用 c# 的 Winforms 应用程序] [PS 我是一个 NOOB,所以会有错误等,但我希望这有助于指导。] 我使用的步骤:

    A部分 1.创建一个代表数据的对象 例如:对象/模型类 在我的例子中,它是一个约会对象

     class FutureVisitsModel
        {
            public DateTime StartDate {get; set;}
            public string Client_Id { get; set; }
            public string Treatment_Desc { get; set; }
            public string Service_Code { get; set; }
    
            public FutureVisitsModel()
            {
                DateTime startdate = StartDate;
                String clinetid = Client_Id;
                String treatmentdesc = Treatment_Desc;
                String serviceCode = Service_Code;
            }
        }
    

    B 部分:创建报告 2. 解决方案新增报告: 右键单击解决方案,选择添加新项目并选择报告 enter image description here 3.打开空白报告 4. 从工具箱中,将表格拖放到报告中 5. 对话框打开以选择数据源 6. 从您的解决方案中选择对象 [ ypu 将寻找您在 A 部分中创建的类

    C 部分:创建报表查看器表单 7. 在解决方案资源管理器中创建一个新表单“formRptViewer” 8.打开表单并添加报表查看器控件 9. 如果您的工具箱中没有控件,则需要从 nugget 安装报表查看器包或通过包管理器控制台安装。 网络表单版本:安装包 Microsoft.ReportingServices.ReportViewerControl.WebForms winforms 版本:Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms

    9.1 将报表查看器的控件设置为public 在解决方案资源管理器中单击 formRptViewer 旁边的下拉菜单 查看构成表单的文件 编辑这个文件:formRptViewer.Designer.cs 将 reprtviewer 的 controll pf 更改为 public public Microsoft.Reporting.WinForms.ReportViewer ReportViewer1;

    D 部分:创建数据表并将其发送给报告 10. 创建数据表 数据表 dataTableFutureVisits = new DataTable(); [您需要用我们自己的数据填充数据表] 11.添加using语句 使用 Microsoft.Reporting.WinForms; 12.设置数据源并新建报表查看器实例

    ReportDataSource rs = new ReportDataSource();
                rs.Name = "DataSet1";
                rs.Value = dataTableFutureVisits;
                FormRptViewer frm = new FormRptViewer();
                frm.ReportViewer1.LocalReport.DataSources.Clear();
                frm.ReportViewer1.LocalReport.DataSources.Add(rs);
                frm.ReportViewer1.LocalReport.ReportEmbeddedResource = "ChiroRecallList.RptFutureVisits.rdlc";
                // name the report with date
                frm.ReportViewer1.LocalReport.DisplayName = "Your File Name Goes Here" + "_" + DateTime.Now.ToString("yyyyMMdd HH:mm");
                frm.ShowDialog();
    

    E 部分:更新报告:向数据表中添加列并在报告中显示它们[也用于删除列]

    1. 向您的数据表添加一列
    2. 更改您的对象类以反映数据 [如 A 部分]
    3. 打开报表并删除数据集[不是数据源]
    4. 在解决方案资源管理器中:有一个展开的属性下拉列表
    5. 展开数据源文件夹
    6. 删除以您的模型命名的数据源 screen shot

    7. 清理并重建解决方案 screenshot

    8. 打开报表并右键单击您的数据源并添加新数据集 screen shot

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2022-12-24
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      相关资源
      最近更新 更多