2

考虑我的以下 XtraReport

在此处输入图像描述

预览时会生成以下输出。

在此处输入图像描述

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

4

3 回答 3

5

我通过添加一个计算字段并分配找到了它的解决方案

Iif([Result]='P',[TotalMarks],0 )

在表达式编辑器中。

于 2012-10-24T19:14:26.427 回答
3

据我所知,我会通过摘要标签的 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;
}

不幸的是,我不知道任何可以由设计师纯粹应用的解决方案。希望能帮助到你。

于 2012-10-16T17:48:04.573 回答
0

虽然 kashif 解决方案没有显示 Sum 值,但主要逻辑在那里。如果你想要 Sum 使用 Sum() 函数:-

Sum(Iif([Result]='P',[TotalMarks],0 ))
于 2019-06-10T11:56:49.663 回答