下载此页面上提到的zip文件(customaggreagtes.zip)后
https://www.telerik.com/forums/real-customaggregate-group-footer-example-needed
我设法想出了以下解决方案:
protected void rg_CustomAggregate(object sender, GridCustomAggregateEventArgs e)
{
if (e.Item is GridGroupFooterItem)
{
GridGroupFooterItem gridFooterItem = e.Item as GridGroupFooterItem;
GridItem[] groupHeaders = rg.MasterTableView.GetItems(GridItemType.GroupHeader);
foreach (GridGroupHeaderItem groupHeader in groupHeaders)
{
if (groupHeader.GroupIndex == gridFooterItem.GroupIndex)
{
decimal groupSum = 0;
foreach (GridItem childItem in groupHeader.GetChildItems())
{
FunctionSummaryDTO functionSummary = (FunctionSummaryDTO)childItem.DataItem;
if (functionSummary.UpfrontPayment == false)
{
groupSum += functionSummary.InvoiceAmount;
}
}
e.Result = groupSum;
}
}
}
if (e.Item is GridFooterItem)
{
decimal totalSum = 0;
GridItem[] groupFooters = rg.MasterTableView.GetItems(GridItemType.GroupFooter);
foreach (GridGroupFooterItem groupFooter in groupFooters)
{
decimal parseBuffer = 0;
decimal.TryParse(groupFooter["colInvoiceAmount"].Text, out parseBuffer);
totalSum += parseBuffer;
}
e.Result = totalSum;
}
}
这可能不是最优雅的解决方案,但它确实做到了。它脱离了上下文,所以我将尝试解释som的细节,以使其更有意义。
-
FunctionSummaryDTO
是仅包含属性的类。它包含网格中一行的数据。
-
functionSummary.UpfrontPayment
是复选框的数据。
-
functionSummary.InvoiceAmount
是应该求和的价格。
-
colInvoiceAmount
包含要求和的价格的列的唯一名称。