代码之家  ›  专栏  ›  技术社区  ›  jahrentorp

如何实现OnCustomAggregate(Telerik:RadGrid)

  •  1
  • jahrentorp  · 技术社区  · 6 年前

    我在ASP页面中有一个RadGrid。网格按包含组织名称的列分组。还有一列包含价格,我想在组页脚(以及网格页脚)中汇总价格。到现在为止,一直都还不错。我可以添加 Aggregate="Custom" 到我要求和的列。

    还有一列包含复选框。我想排除选中复选框的行。因此,我添加 聚合=“自定义” OnCustomAggregate="rg_CustomAggregate" 在RadGrid上。现在我需要实现这个方法rg\u 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 回复  |  直到 6 年前
        1
  •  1
  •   marc_s Anurag    5 年前

    下载此页面上提到的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 包含要求和的价格的列的唯一名称。