我在ASP页面中有一个RadGrid。网格按包含组织名称的列分组。还有一个包含价格的列,我想在组页脚(以及网格页脚)中对它们进行总结。到现在为止还挺好。我可以将Aggregate="Custom"
添加到我想要求和的列中。
还有一个包含复选框的列。我想排除选中复选框的行。因此,我将Aggregate="Custom"
添加到列,并在RadGrid上添加OnCustomAggregate="rg_CustomAggregate"
。现在我需要实现这个方法rg_CustomAggregate,但我正在努力实现如何实际浏览行,以便用未选中的复选框对行中的价格求和。
到目前为止,该方法的基础如下所示:
protected void rg_CustomAggregate(object sender, GridCustomAggregateEventArgs e)
{
int sum = 0;
if (e.Item is GridGroupFooterItem)
{
// TODO: The magic.
e.Result = sum;
}
if (e.Item is GridFooterItem)
{
// TODO: Som other magic.
e.Result = sum;
}
}
很高兴接受有关如何实施魔法的任何提示。我很难在网上找到这方面的例子。
答案 0 :(得分:0)
在此页https://www.telerik.com/forums/real-customaggregate-group-footer-example-needed下载了提到的zip文件(customaggreagtes.zip)后,我设法使用以下解决方案:
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细节,以使它更有意义。