2012-10-14 30 views
2

考虑我下面XtraReport如何在DevExpress的计算条件的总和xtrareport

enter image description here

它会生成以下的输出预览时。

enter image description here

通知占总成绩的报告页脚即125 我的问题是和:我将如何计算的唯一领域,其中的结果是p的总和。 因此,在这种情况下TotalMarks的总和应该是75.

回答

4

我通过添加calcultedfield和在表达式编辑器分配

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

找到其解决方案。

1

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

与其他手动解决方案,你可以通过处理细节带的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; 
} 

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

+2

两天前我问了这个问题,并找到了解决方法,在表达式编辑器中添加一个calcultedfield并赋予这个“Iif([Result] ='P',[TotalMarks],0)”公式,和我为125结果所做的一样。任何方式非常感谢 – kashif

+0

是的,这是一个更优雅的解决方案。我有一个更复杂的场景,我不得不使用代码。无论如何,我希望有一天会有所帮助。 –