【问题标题】:Sum of sum columns in kendo grid剑道网格中总和列的总和
【发布时间】:2015-03-12 06:14:31
【问题描述】:

我有剑道网格java脚本分组如下

group: {
                        field: "ResourceName",
                        aggregates: [
                           { field: "WeekOneUtilization", aggregate: "sum" },
                            { field: "WeekTwoUtilization", aggregate: "sum" },
                             { field: "WeekThreeUtilization", aggregate: "sum" },
                              { field: "WeekFourUtilization", aggregate: "sum" }
                        ]
                    },
                    aggregate: [{ field: "ProjectName", aggregate: "count" },
                                { field: "WeekOneUtilization", aggregate: "sum" },
                            { field: "WeekTwoUtilization", aggregate: "sum" },
                             { field: "WeekThreeUtilization", aggregate: "sum" },
                              { field: "WeekFourUtilization", aggregate: "sum" }]

我想得到四个星期的总和

结果如下

【问题讨论】:

    标签: javascript asp.net asp.net-mvc kendo-ui kendo-grid


    【解决方案1】:

    您的代码是用 JavaScript 编写的,太棒了...现在您是(在您的网格中)最接近上帝的东西...所以让我们开始工作吧。

    1) 转到您的数据源的模型,并在那里定义一些方便的计算对象...例如。

    var yourDataSource = new kendo.data.DataSource({
        schema:{
            model: {
                // Typical blah blah here
                id: 'your-id-field',
                fields: {
                   // Typical field declaration blah blah
                },
                // This handy function will calculate
                // the sum of the 4 weeks in your row
                sumOfAllWeeks: function(){                    
                   return this.get('WeekOneUtilization') + 
                          this.get('WeekTwoUtilization') + 
                          this.get('WeekThreeUtilization') + 
                          this.get('WeekFourUtilization');                 
                }
            }     
        }
    });
    

    2) 现在您可以将这个闪亮的全新计算字段添加到您的聚合配置中,语法有点不同。

    { field: "sumOfAllWeeks()", aggregate: "sum" }
    

    3) 但是,如果您只想让 kendo 处理网格中计算属性的聚合,则存在一个错误(可能现在已修复)...他错误地尝试将您的字段名称“sumOfAllWeeks()”调用为一个函数而不是累加器,不像他对普通字段所做的那样。因此,在您的网格中,您必须将模板用作函数。

    让我们通过在您的网格中为您的计算创建一个新列来说明这一点,就像这样......

     // Your grid fields declaration
     columns:[
         // Here you may have your columns declared,
         // as shown in your picture... so I save the blah blah
         // Now we declare a column for your computed.
         {
             field: 'sumOfAllWeeks()',
             aggregates: 'sum', 
             // This handles the group footer template
             groupFooterTemplate: function(data){
               return data['sumOfAllWeeks()'].sum;
             },
             // This handles the table footer template
             footerTemplate: function(data){
               return data['sumOfAllWeeks()'].sum;
             }
         }
     ]
    

    【讨论】:

    • 您好,感谢您的详细回复,此代码正在向所有行添加一个新列并显示每行的总数。我真正想要的是只获得组页脚值的总和
    • @udaya726 好吧,如果您为此配置一个列,它只会显示一个新列。您不必放置一个列,我只是向您展示了一个示例,这样您就可以了解发生了什么在引擎盖下。现在你如何渲染这些东西取决于你......但这意味着你必须在你的渲染“循环”之外的某个地方手动访问结果......你只需按照我提到的那样配置聚合,并要求 DataSource使用“聚合”方法计算它,请参阅docs.telerik.com/kendo-ui/api/javascript/data/…
    • @udaya726 您也可以将 groupFooterTemplate 和 footerTemplate 函数...放在任何其他函数中,它们将正常工作...因为在每次渲染过程中,当前行/组/的所有值页脚可通过参数“数据”获得
    • 感谢您清晰、详细的回复。我在这方面遇到了一段时间的困难,这为我解决了一切问题。
    【解决方案2】:

    您可以为此使用ClientTemplate

    columns.Bound(p => p.Total).ClientTemplate("#= WeekOneUtilization + WeekTwoUtilization + WeekThreeUtilization + WeekFourUtilization #");
    

    【讨论】:

    • @AdrianSalazar 他可能有,但不是每个搜索“Sum”和“kendo grid”的人都会这样做。考虑更大的图景。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多