【发布时间】:2012-10-14 13:24:31
【问题描述】:
考虑一下我的以下 XtraReport
预览时会生成以下输出。
请注意报告页脚中总分的总和,即 125。 我的问题是:我将如何计算结果为 p 的唯一字段的总和。 因此,在这种情况下,TotalMarks 的总和应该是 75。
【问题讨论】:
标签: c# xtrareport
考虑一下我的以下 XtraReport
预览时会生成以下输出。
请注意报告页脚中总分的总和,即 125。 我的问题是:我将如何计算结果为 p 的唯一字段的总和。 因此,在这种情况下,TotalMarks 的总和应该是 75。
【问题讨论】:
标签: c# xtrareport
我通过添加计算字段并分配找到了解决方案
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 ))
【讨论】: