2013-11-25 2 views
1

Я хочу сделать сумму значений в My Кендо Сетка Форме ее Всего,Сумма значений в Кендо Сетка

Для этого я использую Кендо Сетка Мол,

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

Я хочу показать сумму значений в «Total» зависит от того, есть изменения, Как это можно сделать? Пожалуйста помоги мне с этим.

+0

Использование агрегатов сетки kendo..http: //demos.kendoui.com/web/grid/aggregates.html –

+0

Но агрегат используется для совокупности конкретного столбца , а в моем сценарии я хочу, чтобы сумма всех столбцов в Total , – Rahul

+0

Думаю, вам нужна сумма строки (а не столбец). Итак, 'Sum = Total = SUM (Nett, Tax, GST_VAT ...)'. Если это так, вы можете сделать суммирование с контроллера. – Haritha

ответ

0

Наконец я получил то, что я использую в моем сценарии, & его сделать вручную с помощью 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; 

    }); 

Если кто-то, имеющий любое новое решение, то предложите, я буду стараться осуществить это в моем приложении ,

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(); 
     }) 
+0

Да, я знаю этот пример, но мой сценарий отличается от этого, Пожалуйста, предложите мне в моем сценарии, что мне делать в приведенном выше коде? – Rahul

1

я думаю вам нужно summation of each row. Вы можете сделать это в своем контроллере.

Total = Nett + Tax + GST_VAT... 

Или в модели представления

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

Если вы хотите просуммировать каждый столбец, используйте агрегат, как описано Atanas Korchev.

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.

Смежные вопросы