FastReport CompilerException:OperationSupplies数据源注册与使用问题
解决FastReport中嵌套数据源OperationSupplies的CompilerException错误
问题分析
出现FastReport.Utils.CompilerException: (Cell191): Error CS0103: The name 'OperationSupplies' does not exist in the current context错误的核心原因是嵌套数据源的注册方式错误,同时报表中对数据源的引用路径不符合FastReport的嵌套数据源规则。
解决方案
1. 修正数据源注册逻辑
不需要循环逐个注册每个Operation的OperationSupplies集合,FastReport的RegisterData方法会自动识别父对象中的嵌套集合属性。删除原代码中的循环注册部分,仅保留父数据源的注册:
// 仅注册父数据源,FastReport会自动识别嵌套的OperationSupplies集合 web.Report.RegisterData(model, "Operations"); // 移除以下错误的循环注册代码 // foreach (var operation in model) // { // web.Report.RegisterData(operation.OperationSupplies, "Operations.OperationSupplies"); // }
2. 确保模型类结构正确
确认你的Operation模型类中包含OperationSupplies属性,类型为集合类型(如List<OperationSupply>),示例模型结构:
public class Operation { public int Id { get; set; } public int AdmissionPatientId { get; set; } public string AdmissionPatientName { get; set; } public string OperationName { get; set; } public string OperationCode { get; set; } // 嵌套的子集合,必须是集合类型才能被FastReport识别为嵌套数据源 public List<OperationSupply> OperationSupplies { get; set; } } public class OperationSupply { public string Medicine { get; set; } public string Description { get; set; } public string Route { get; set; } public int Quantity { get; set; } }
3. 修正报表中的数据源引用
在报表设计器中,确保单元格的表达式使用父数据源+子数据源的完整路径,例如:
- 错误写法:
[OperationSupplies.Medicine] - 正确写法:
[Operations.OperationSupplies.Medicine]
你提供的XML数据源定义已经正确将OperationSupplies设置为Operations的嵌套数据源,无需修改这部分配置。
4. 验证数据源注册结果
可以在代码中添加验证代码,确认嵌套数据源是否被正确识别:
var childDs = web.Report.GetDataSource("Operations.OperationSupplies"); if (childDs != null && childDs.Enabled) { // 嵌套数据源注册成功,可添加日志或调试逻辑 }
完整修改后的核心代码片段
web.Report.SetParameterValue("DoctorName", DoctorName); // 仅注册父数据源,自动识别嵌套集合 web.Report.RegisterData(model, "Operations"); // 可选:验证嵌套数据源是否存在 var childDs = web.Report.GetDataSource("Operations.OperationSupplies"); web.Report.Prepare(); string export = Directory.GetCurrentDirectory() + $@"\wwwroot\export\{reportName}.pdf"; web.Report.Export(new PDFSimpleExport(), export);
内容的提问来源于stack exchange,提问作者tarık hasan
相关产品推荐
相关产品推荐

