将RDLC数据源设置为对象的问题

时间:2012-06-14 17:26:51

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

背景

我的任务是将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; }
}

我也愿意使用&#34; TurnAroundVal&#34;的IEnumerable。作为数据源,只需将日期,整数和双精度作为参数传递。要么工作。

问题

我是否缺少Visual Studio 2010中的设置以允许RDLC Designer查看我创建的对象? 即使我认为这适用于我定义的类,我也错了吗?

答案

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

5 个答案:

答案 0 :(得分:3)

  1. 确保这些类与应用程序位于同一名称空间中。
  2. 在创建报告之前尝试构建应用程序
  3. 启动报告向导。在DataSouce下,选择您的Web应用程序的名称。
  4. 在可用数据集下,您应该看到Visual Studio解释为“选择方法”。如果一切顺利,那应该是TurnArounds。
  5. 您可能需要将类文件放在App_Data或App_Code文件夹中,但我不确定。

    这也可能有所帮助。

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

答案 1 :(得分:2)

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

同时尝试实施INotifyPropertyChanged

答案 2 :(得分:2)

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

Visual Studio中还有一些其他向导不能与公共成员一起使用。

干杯,马库斯

答案 3 :(得分:0)

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

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

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

Report Wizard showing Data Source Configuration Wizard

然而,选择在MVC项目中添加新的报表向导项 只是在没有数据源配置向导的情况下启动了报表向导:

Report Wizard without the Data Source Configuration Wizard

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

答案 4 :(得分: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.向解决方案添加了报告:    右键单击解决方案,选择添加新项目,然后选择报告 enter image description here  3.打开空白报告  4.从工具箱中,将n拖放到报表中  5.对话框打开以选择数据源  6.从解决方案中选择对象[ypu将寻找您在A部分中创建的类<​​/ p>

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

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

D部分:创建数据表并将其发送给报告 10.创建一个数据表 DataTable dataTableFutureVisits =新的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