【问题标题】:Sum of Values in Kendo Grid剑道网格中的值总和
【发布时间】:2013-11-25 09:37:41
【问题描述】:

我想对我的剑道网格中的值求和以形成其总数,

为此,我正在使用类似剑道网格,

 @(Html.Kendo().Grid<Invoice.Models.ViewModels.SupplementViewModel>()
                        .Name("Supplement")
                        .TableHtmlAttributes(new { style = "height:20px; " })
                        .Columns(columns =>
                        {
                            columns.Bound(p => p.SupplementID).Hidden(true);

                            columns.Bound(p => p.Description).Title("Description").Width(15);

                            columns.Bound(p => p.Nett).Title("Nett").Width(15).HtmlAttributes(new { @class="Currency"});
                            columns.Bound(p => p.Tax).Title("Tax").Width(15).HtmlAttributes(new { @class = "Currency" });
                            columns.Bound(p => p.GST_VAT).Title("GST_VAT").Width(15).HtmlAttributes(new { @class = "Currency" });
                            columns.Bound(p => p.ServiceTax).Title("ServiceTax").Width(15).HtmlAttributes(new { @class = "Currency" });
                            columns.Bound(p => p.ServiceFee).Title("ServiceFee").Width(15).HtmlAttributes(new { @class = "Currency" });
                            columns.Bound(p => p.Total).Title("Total").Width(15).HtmlAttributes(new { @class = "Currency" });


                        })
                        .Editable(editable => editable.Mode(GridEditMode.InCell))
                        .Navigatable()
                        .Sortable()
                        .Scrollable(scr => scr.Height(200))
                        .Scrollable()
                        .DataSource(dataSource => dataSource
                            .Ajax()
                            .Batch(true)
                            .ServerOperation(false)
                            .Events(events => events.Error("error_handler"))
                            .Model(model =>{
                                model.Id(p => p.ProductTypeCode);
                            })
                            .Create("Editing_Create", "Grid")

                            .Update("Editing_Update", "Grid")
                            .Destroy("Editing_Destroy", "Grid")
                            )
                )

场景是这样的::

我想在“总计”中显示值的总和取决于那里的变化, 如何做呢?请帮我解决这个问题。

【问题讨论】:

  • 使用剑道网格聚合..demos.kendoui.com/web/grid/aggregates.html
  • 但是聚合用于特定列的聚合,在我的场景中,我想要总计所有列的总和。
  • 我猜你需要行(而不是列)的总和。所以Sum = Total = SUM(Nett, Tax, GST_VAT...) 。如果是这种情况,您可以从控制器进行求和。

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


【解决方案1】:

您可以使用本演示中所示的聚合:http://demos.kendoui.com/web/grid/aggregates.html

有两种聚合 - 在分组期间应用的聚合和应用于整个网格的聚合。以下是如何定义后者:

 .DataSource(dataSource => dataSource
        .Ajax()
        .Aggregates(aggregates =>
        {
            aggregates.Add(p => p.UnitsInStock).Min().Max().Count();
            aggregates.Add(p => p.UnitsOnOrder).Average();
            aggregates.Add(p => p.ProductName).Count();
            aggregates.Add(p => p.UnitPrice).Sum();
        })

【讨论】:

  • 是的,我知道这个例子,但我的场景与此不同,请在我的场景中建议我应该在上面的代码中做什么?
【解决方案2】:

我猜你需要summation of each row。您可以在控制器中执行此操作。

Total = Nett + Tax + GST_VAT...

或者在视图模型中

public int Total
{
    get
    {
        return this.Nett + this.Tax;
    }
}

如果您想要每列的总和,请按照Atanas Korchev 的描述使用聚合。

【讨论】:

    【解决方案3】:

    最后我得到了我在我的场景中使用的东西,并且它使用 javascript:: 手动完成

      $("#Supplement").on('change', '.Currency > input[type="text"]', function () {
            var row = $(this).closest("tr");
            var temp = $(this).val();
    
            var nett = parseFloat(row.find('input')[2].value);
            var tax = parseFloat(row.find('input')[3].value);
            var gst_vat = parseFloat(row.find('input')[4].value);
            var servicetax = parseFloat(row.find('input')[5].value);
            var servicefee = parseFloat(row.find('input')[6].value);
            var total = nett + tax + gst_vat + servicetax + servicefee;
            row.find('.TotalCurrency ')[0].textContent = total;
    
        });
    

    如果有人有任何新的解决方案,请提出建议,我会尝试在我的应用程序中实现。

    【讨论】:

      【解决方案4】:

      在我看来,鉴于 Total 客户端更新的要求,您的解决方案是可行的。

      我建议您不要直接获取或更新单元格数据(例如 var tax = parseFloat(row.find('input')[3].value );

      改为使用网格客户端 API 获取值。即:

      var grid = $("#grid").data("kendoGrid");
      var row = $(this).closest("tr");
      var data = grid.dataItem(row);
      tax = data.tax;
      

      请参阅 dataItem here 的文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 2013-11-07
        相关资源
        最近更新 更多