我正在创建一个简单的报告,使用我的项目中的.NET对象作为数据源,使用SetDatasource()方法.但是,当我运行报告时,我收到"数据库登录失败"错误.这个报告根本没有连接到数据库 - 我错过了什么吗?
非常感谢,D.
补充:我想如果我包含Controller动作可能会有所帮助.这是一个快速而肮脏的测试,而不是最终方法的样子:
public ActionResult StewardSheets(int showId, int groupId)
{
ReportClass rptH = new ReportClass();
rptH.FileName = DataHelper.getReportFilePath("Test.rpt",this);
NZDSDataContext dataContext = new NZDSDataContext();
var showDetails = (from s in dataContext.Shows
where s.ID == showId
select new StewardSheetModel
{
EventDate = s.EventDate.ToLongDateString(),
Region = s.Region.Name,
ShowTitle = s.Name
}).FirstOrDefault();
List<StewardSheetModel> details = new List<StewardSheetModel>();
details.Add(showDetails);
rptH.SetDataSource(details);
rptH.Load();
Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
return File(stream, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)
固定:D'哦!我使用ReportClass而不是ReportDocument.更改了该行,并且还使用了Refresh(),因为Load()不是有效的方法.现在它工作得很好!
如果使用ADO.NET DataSet作为数据源,则DataSet定义可能与报表中的定义不同步.从报表设计器的上下文菜单中选择Database-> Verify Database选项通常可以解决此问题.
此外,如果报表已链接表,并且您无法为其中一个表设置数据源,则会出现此错误.修复是要么从报表中删除表,要么正确设置它的数据源.
例如,如果您的报表在某些键上链接了一个Customers表和一个Orders表,则需要为这两个表设置数据源.如果您忘记并且只设置了一个,则会出现"数据库登录失败"错误,这会产生误导.
// Create a new customer orders report.
CustomerOrdersReport report = new CustomerOrdersReport();
// Get the report data.
DataTable customersTable = getCustomersData();
DataTable ordersTable = getOrdersData();
// Set datasources.
report.Database.Tables["Customers"].SetDataSource(customersTable);
report.Database.Tables["Orders"].SetDataSource(ordersTable ); // Don't forget this line like I did!!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56386 次 |
| 最近记录: |