考虑我的以下XtraReport
预览时会生成以下输出。
注意报告页脚中的总标记总和,即125。 我的问题是:我如何计算结果为p的唯一字段的总和。 因此,在这种情况下,TotalMarks的总和应为75.
答案 0 :(得分:4)
我通过添加calcultedfield并分配
找到了它的解决方案Iif([Result]='P',[TotalMarks],0 )
在表达式编辑器中。
答案 1 :(得分:2)
据我所知,我会通过摘要标签的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 band的BeforePrint事件来汇总所需的值,然后将计算的总和分配给其BeforePrint事件中的sum标签,类似于上面。对于更复杂的数据源,这种方法更有效,更灵活。
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;
}
不幸的是,我不知道任何可以纯粹由设计师应用的解决方案。希望它有所帮助。
答案 2 :(得分:0)
尽管kashif解决方案未显示Sum值,但主要逻辑在那里。如果要求和,请使用Sum()函数:-
Sum(Iif([Result]='P',[TotalMarks],0 ))