如何实现OnCustomAggregate(Telerik:RadGrid)

时间:2018-01-18 10:48:54

标签: c# asp.net telerik telerik-grid radgrid

我在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;
  }
}

很高兴接受有关如何实施魔法的任何提示。我很难在网上找到这方面的例子。

1 个答案:

答案 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细节,以使它更有意义。

  • FunctionSummaryDTO是一个只包含属性的类。它包含网格中一行的数据。
  • functionSummary.UpfrontPayment是复选框的数据。
  • functionSummary.InvoiceAmount是应该求和的价格。
  • colInvoiceAmount是包含要求汇总价格的列的唯一名称。