背景
我的任务是将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中指定的名称相同。
答案 0 :(得分:3)
您可能需要将类文件放在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#库项目中的 会显示带有数据源配置向导的报告向导(我可以在其中选择是否以模态方式使用数据库,服务或对象作为数据源:
然而,选择在MVC项目中添加新的报表向导项 只是在没有数据源配置向导的情况下启动了报表向导:
我尝试将业务对象类添加到我的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部分:更新报告:将列添加到数据表中并在报告中显示它们[也用于删除列]
删除以模型命名的数据源 screen shot
清理并重建解决方案 screenshot