在同一网格上创建多个自定义摘要(并计算仅对特定数字求和的摘要)
本文关键字:计算 数字 和的 求和 创建 网格 自定义 | 更新日期: 2023-09-27 18:23:47
我正在尝试创建另一个在同一网格上工作的自定义摘要。我已经有了以下内容,它从另外两列中计算百分比。
我现在正试图添加另一个自定义摘要,它对名为TestErrors的列的值进行求和。该coulm中的单元格只有3个不同的值:0、1和128。我想对所有非128的值求和(如果4个单元格包含0、1、1和128,则总和为2)。
如何在同一网格上创建两个不同的自定义摘要,以及如何计算折扣为128的摘要?
编辑:使用下面nempo的答案,我得到了以下内容,但它不能正常工作。没有显示任何值。
XAML:
<dxg:GridControl.GroupSummary>
<dxg:GridSummaryItem FieldName="TestAmount" SummaryType="Sum" DisplayFormat="Number of tests: {0}"/>
<dxg:GridSummaryItem FieldName="TestErrors" SummaryType="Custom" DisplayFormat="Number of errors: {0}" Tag="custsumError"/>
<dxg:GridSummaryItem FieldName="TestErrorRate" SummaryType="Custom" DisplayFormat="Error rate: {0:P4}" Tag="custsumRate"/>
</dxg:GridControl.GroupSummary>
C#:
private void dxgErrorGrid_CustomSummary(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
if (!e.IsTotalSummary)
return;
switch (e.SummaryProcess)
{
case CustomSummaryProcess.Start:
sumErrors = 0;
sumTests = 0;
sumTestErrors = 0;
break;
case CustomSummaryProcess.Calculate:
var testError = Convert.ToInt32(((clsErrorData)e.Row).TestErrors);
sumTests += ((clsErrorData)e.Row).TestAmount;
sumErrors += testError;
sumTestErrors += testError != 128 ? testError : 0;
break;
case CustomSummaryProcess.Finalize:
var summary = e.Item as GridSummaryItem;
if (summary == null || summary.Tag == null)
return;
switch (summary.Tag.ToString())
{
case "custsumError":
e.TotalValue = sumTestErrors;
break;
case "custsumRate":
e.TotalValue = (decimal)sumErrors / sumTests;
break;
}
break;
}
}
若要创建两个不同的自定义摘要,可以使用XAML或GridControl.GroupSummary.Add
方法
XAML示例:
<dxg:GridControl.GroupSummary>
<dxg:GridSummaryItem FieldName="YourFieldName" SummaryType="Custom" Tag="Custom0"/>
<dxg:GridSummaryItem FieldName="YourFieldName" SummaryType="Custom" Tag="Custom1"/>
</dxg:GridControl.GroupSummary>
c#示例:
dxgErrorGrid.GroupSummary.Add(SummaryItemType.Custom, "YourFieldName").Tag = "Custom0";
dxgErrorGrid.GroupSummary.Add(SummaryItemType.Custom, "YourFieldName").Tag = "Custom1";
在GridControl.CustomSummary
事件中,您可以使用SummaryItemBase.Tag
属性轻松识别当前正在处理的摘要项
以下是示例:
private int sumErrors;
private int sumTests;
private int sumTestErrors;
private void dxgErrorGrid_CustomSummary(object sender, CustomSummaryEventArgs e)
{
if (!e.IsGroupSummary)
return;
switch (e.SummaryProcess)
{
case CustomSummaryProcess.Start:
sumErrors = 0;
sumTests = 0;
sumTestErrors = 0;
break;
case CustomSummaryProcess.Calculate:
var testError = Convert.ToInt32(((clsErrorData)e.Row).TestErrors);
sumTests += ((clsErrorData)e.Row).TestAmount;
sumErrors += testError;
sumTestErrors += testError != 128 ? testError : 0;
break;
case CustomSummaryProcess.Finalize:
var summary = e.Item as GridSummaryItem;
if (summary == null || summary.Tag == null)
return;
switch (summary.Tag.ToString())
{
case "Custom0":
e.TotalValue = (decimal)sumErrors / sumTests;
break;
case "Custom1":
e.TotalValue = sumTestErrors;
break;
}
break;
}
}