如何在devexpress xtrareport中计算条件和

时间:2012-10-14 13:24:32

标签: c# xtrareport

考虑我的以下XtraReport

enter image description here

预览时会生成以下输出。

enter image description here

注意报告页脚中的总标记总和,即125。 我的问题是:我如何计算结果为p的唯一字段的总和。 因此,在这种情况下,TotalMarks的总和应为75.

3 个答案:

答案 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 ))