使用XtraReport的CalculatedFiled(计算字段)实现RDLC报表中表达式
DevExpress报表确实强大,花样繁多,眼花缭乱。
这次使用XtraReport开发报表,很多问题在官方的文档中并没有详细的说明,特此记录。
1、XtraReport中FormattingRules属性是只能返回bool值的条件(Condition)判断,而不是我想要的表达式。
2、根据XtraReport官方文档中拖控件的方式创建的CalculatedFiled才是我想要的表达式。
1》拖控件的方式不灵活,而且XtraReport对象的DataSource(数据源)使用的DataSet类型,在构造XtraReport时必须指定DataMember属性。
this.calculatedField1 = new CalculatedField { DataMember = "Product", Expression = "Iif([Id]==1,-2,2 )", Name = "calculatedField1" }; this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { this.calculatedField1});//把计算字段放到报表的计算字段集合中,否则无法表现此字段。 this.DataMember = "Product"; this.DataSource = ds; this.xrTableCell1.DataBindings.Add("Text", null, "Product.calculatedField1");不过,这些都是拖拖控件就会自动生成的,不需要手动去写。
2》用纯代码的方式来实现,我的数据源是List<>类型,这时候需要注意在构造时,一定不能指定DataMember属性。
this.calculatedField1 = new CalculatedField { //DataMember = "Product",//使用List作为数据源,一定不能设置DataMember属性 Expression = "Iif([Id]==1,-2,2 )", Name = "calculatedField1" }; this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] { this.calculatedField1}); //this.DataMember = "Product";//使用List作为数据源,一定不能设置DataMember属性 this.DataSource = list; this.xrTableCell1.DataBindings.Add("Text", null, "calculatedField1");
3、XtraReport报表似乎不支持RDLC中行组(RowGroup)和列组(ColumnGroup),或许是我没有发现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)