考虑我的以下 XtraReport
预览时会生成以下输出。
请注意报告页脚中的总标记总和,即 125。我的问题是:我将如何计算结果为 p 的唯一字段的总和。因此在这种情况下 TotalMarks 的总和应该是 75。
考虑我的以下 XtraReport
预览时会生成以下输出。
请注意报告页脚中的总标记总和,即 125。我的问题是:我将如何计算结果为 p 的唯一字段的总和。因此在这种情况下 TotalMarks 的总和应该是 75。
我通过添加一个计算字段并分配找到了它的解决方案
Iif([Result]='P',[TotalMarks],0 )
在表达式编辑器中。
据我所知,我会通过摘要标签的 BeforePrint 事件手动完成。使用代码计算所需的总和,并将结果分配给标签的 Text 属性。如果您可以在报表中显式访问您的数据源(例如,如果您使用 IList 数据源),这将非常有效。
private void sumLabel_BeforePrint(object sender, BeforeEventArgs e) {
XRLabel lbl = sender as XRLabel;
if (lbl == null) return;
int sum = myList.Where(item => item.Result == "P").Sum(item => item.TotalMarks);
lbl.Text = sum;
}
使用另一种手动解决方案,您可以在打印报告期间通过处理 Detail 带的 BeforePrint 事件来汇总所需的值,然后将计算的总和分配给其 BeforePrint 事件中的总和标签,类似于上面。对于更复杂的数据源,这种方法更有效、更灵活。
int currentSum = 0;
private void Detail_BeforePrint(object sender, BeforeEventArgs e) {
var currentRow = GetCurrentRow() as MyData;
if (currentRow == null) return;
if (currentRow.Result == "P")
currentSum += currentRow.TotalMarks;
}
private void sumLabel_BeforePrint(object sender, BeforeEventArgs e) {
XRLabel lbl = sender as XRLabel;
if (lbl == null) return;
lbl.Text = currentSum;
// invalidate the currentSum for the case of any further report pringing process
currentSum = 0;
}
不幸的是,我不知道任何可以由设计师纯粹应用的解决方案。希望能帮助到你。
虽然 kashif 解决方案没有显示 Sum 值,但主要逻辑在那里。如果你想要 Sum 使用 Sum() 函数:-
Sum(Iif([Result]='P',[TotalMarks],0 ))