考虑我下面XtraReport如何在DevExpress的计算条件的总和xtrareport
它会生成以下的输出预览时。
通知占总成绩的报告页脚即125 我的问题是和:我将如何计算的唯一领域,其中的结果是p的总和。 因此,在这种情况下TotalMarks的总和应该是75.
考虑我下面XtraReport如何在DevExpress的计算条件的总和xtrareport
它会生成以下的输出预览时。
通知占总成绩的报告页脚即125 我的问题是和:我将如何计算的唯一领域,其中的结果是p的总和。 因此,在这种情况下TotalMarks的总和应该是75.
我通过添加calcultedfield和在表达式编辑器分配
Iif([Result]='P',[TotalMarks],0)
找到其解决方案。
据我所知,我会通过摘要标签的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;
}
不幸的是,我不知道任何可以纯粹由设计师应用的解决方案。希望能帮助到你。
两天前我问了这个问题,并找到了解决方法,在表达式编辑器中添加一个calcultedfield并赋予这个“Iif([Result] ='P',[TotalMarks],0)”公式,和我为125结果所做的一样。任何方式非常感谢 – kashif
是的,这是一个更优雅的解决方案。我有一个更复杂的场景,我不得不使用代码。无论如何,我希望有一天会有所帮助。 –