19

背景:

我的任务是将 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 中指定的名称相同。

4

5 回答 5

3
  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

于 2012-06-14T18:22:58.927 回答
2

Visual Studio does not recognize your class when you use only public members. When you use getter and setter instead, you can see your class when you choose your datasource.

There are some other wizards in Visual Studio that do not work with public members.

Cheers, Markus

于 2014-03-11T10:04:10.177 回答
2

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

也尝试实施INotifyPropertyChanged.

于 2012-11-20T12:14:48.273 回答
0

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

我的解决方案包括一个 C# 库项目和一个 MVC 客户端项目。

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

显示数据源配置向导的报告向导

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

没有数据源配置向导的报表向导

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

于 2018-02-01T09:34:57.323 回答
0

在没有报表向导的情况下,我能够在 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. 向解决方案添加报告:右键单击解决方案,选择添加新项目并选择报告 在此处输入图像描述 3. 打开空白报告 4. 从工具箱中,将表格拖放到报告中 5. 一个对话框打开以选择数据源 6. 从您的解决方案中选择对象 [ ypu 将寻找您在 A 部分中创建的类

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

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

D 部分:创建数据表并将其发送到报告 10. 创建数据表 DataTable dataTableFutureVisits = new DataTable(); [您需要用我们自己的数据填充数据表] 11. 添加 using 语句 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. 删除以模型屏幕截图命名的数据源

  7. 清理并重建解决方案 截图

  8. 打开报告并右键单击您的数据源并添加新数据集 屏幕截图
于 2019-03-08T01:53:00.537 回答