【问题标题】:how to calculate conditional sum in devexpress xtrareport如何在devexpress xtrareport中计算条件和
【发布时间】:2012-10-14 13:24:31
【问题描述】:

考虑一下我的以下 XtraReport

预览时会生成以下输出。

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

【问题讨论】:

    标签: c# xtrareport


    【解决方案1】:

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

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

    在表达式编辑器中。

    【讨论】:

    • 这不求和,它只给出列表中最后一个的总数。
    【解决方案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 区域的 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;
    }
    

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

    【讨论】:

    • 我两天前问了这个问题,并通过添加一个计算字段并在表达式编辑器中分配这个“Iif([Result]='P',[TotalMarks],0)”公式找到了解决方案而不是以与我对 125 结果相同的方式计算总和。任何方式都非常感谢
    • 是的,这是一个更优雅的解决方案。我有一个更复杂的场景,我必须使用代码。无论如何,我希望有一天它会有所帮助。
    • 对我很有帮助,因为我已经有很多自定义业务逻辑。看起来我可以使用 BeforePrint 事件来调用我现有的类
    • 当前版本的 XtraReports 套件可以使用表达式处理许多(大多数)复杂情况。聚合计算字段现在很简单:docs.devexpress.com/XtraReports/12441/…
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多