剑道网格中的值之和

时间:2013-11-25 09:37:42

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

我想在我的剑道网格中对值进行求和以形成总计,

为此我使用的是Kendo Grid Like,

 @(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")
                            )
                )

情景是这样的:: enter image description here

我想在“总计”中显示值的总和取决于那里的变化, 怎么做到呢?请帮帮我。

4 个答案:

答案 0 :(得分:2)

您可以使用此演示中显示的聚合: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();
        })

答案 1 :(得分:1)

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

Total = Nett + Tax + GST_VAT...

或者在视图模型中

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

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

答案 2 :(得分:0)

最后我得到了一些我在我的场景中使用的东西,&amp;它使用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;

    });

如果有人有任何新的解决方案,请建议,我会尝试在我的申请中实现。

答案 3 :(得分:0)

在我看来,鉴于要求客户端更新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的文档。