背景:
我的任务是将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; }
}
我也愿意使用IEnumerable的“TurnAroundVal”作为数据源,并将日期,整数和双精度作为参数传递。要么工作。
题
我是否缺少Visual Studio 2010中的设置以允许RDLC Designer查看我创建的对象?即使我认为这适用于我定义的类,我也错了吗?
回答
所有给出的建议都是有帮助的,但最终让我能够工作的是在同一个解决方案中创建一个临时的非Web项目并在那里创建RDLC。当我去添加数据集时,它会显示“对象”作为选项。您必须添加对Web项目的引用,以便您的对象可见,但随后您可以选择所需的对象并在RDLC中使用它。之后,您只需将RDLC文件拖放到Web项目中,删除临时项目,就可以了。请记住,您必须在代码中手动添加数据源,并且它们必须与您在RDLC中指定的名称相同。
您可能需要将类文件放在App_Data或App_Code文件夹中,但我不确定。
这也可能有所帮助。
http://msdn.microsoft.com/en-us/library/ms251692%28v=vs.100%29.aspx
将对象设置在相同的命名空间下,但是在另一个项目上,然后在UI项目中引用该项目。
也尝试实施INotifyPropertyChanged
。
当您仅使用公共成员时,Visual Studio无法识别您的类。当您使用getter和setter时,您可以在选择数据源时看到您的类。
Visual Studio中还有一些其他向导不能与公共成员一起使用。
干杯,马库斯
我在尝试在Visual Studio 2017中的ASP.NET MVC项目中创建RDLC报表时遇到了同样的问题,因此我将其作为单独的答案添加,以明确这仍然是2018年1月的问题。
我的解决方案包括一个C#库项目和一个MVC客户端项目。
在C#库项目中添加报告(通过选择添加新项目,然后选择报告向导项目)将显示带有数据源配置向导的报告向导(我可以选择是否使用数据库,服务或对象作为数据源)以模态方式在其上:
然而,选择在MVC项目中添加新的报表向导项只是在没有数据源配置向导的情况下启动了报表向导:
我尝试将业务对象类添加到我的MVC项目中,重新编译它然后再次向MVC项目添加一个Report,但我仍然得到了第二个屏幕截图,所以看起来你只是在添加时没有得到数据源配置向导MVC项目出于某种原因。
我能够在VS 2017中添加一个对象作为数据源,而无需报告向导。 [Winforms app使用c#] [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.如果您的工具箱中没有控件,则需要安装报表来自金块的查看器包或通过包管理器控制台安装。 webforms版本:Install-Package Microsoft.ReportingServices.ReportViewerControl.WebForms winforms版本:Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms
9.1在解决方案资源管理器中将报表查看器的控件设置为public将单击formRptViewer旁边的下拉列表,以查看构成表单的文件编辑此文件:formRptViewer.Designer.cs将控件返回到公共公共Microsoft.Reporting .WinForms.ReportViewer ReportViewer1;
D部分:创建一个数据表并将其发送到报告10.创建一个数据表DataTable dataTableFutureVisits = new DataTable(); [您将需要使用我们自己的数据填充数据表] 11.使用Microsoft.Reporting.WinForms添加using语句; 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部分:更新报告:向数据表添加列并在报告中显示[也用于删除列的分支]