问题描述
我正在使用cellClose事件更新单元格值,它在所选行的值内工作。我最后一行称为Total,它是D列的值之和
---------- Column_A Column_B Column_C Column_D
----------产品1 --- ValueB1 --- ValueC1 ------- ValueD1
----------产品2 --- ValueB2 --- ValueC2 ------- ValueD2
----------总计------------------------------------ ------ ValueT
列D =列C *列B和值T =值D1 +值D2
当我更新ValueC1或ValueB1时,ValueD1得到更新并用新值重新呈现。问题在于ValueT已过胶但不会重新渲染。
我的代码就是这个:
cellClose:function(e){
var dataItem=e.sender.dataItem($(e.container).parent())// getting the current edited row
var aux= e.sender.dataSource.data(); //getting all rows
var dataTotal= aux[aux.length-1]; //geting total row
valueB=dataItem["Column_B"];
valueC=dataItem["Column_C"];
dataItem.set("Column_D",valueB*ValueC);
var sum=0;
for (let i=0;i<aux.length-1;i++)//getting sum of values of Column_D
{
sum=sum+aux[i].Column_D;
}
dataTotal.set("Column_D",sum) // setting sum
}
解决方法
-
像https://demos.telerik.com/kendo-ui/grid/aggregates那样使用内置的聚合,它们恰好适合这种情况。编程就是为工作选择合适的工具。
-
您的循环应仅迭代到
aux.length-2
,否则,您要将旧的总和添加到新的总和中。您可以通过使用内置的聚合来避免这种错误。 -
调用
var aux= e.sender.dataSource.data()
返回an array,其中包含网格的数据,但是网格未绑定到该数组。它绑定到数据源。您可以通过执行e.sender.dataSource.data()
将其绑定到修改后的数组,也可以使用内置的聚合而不是完成所有这些工作。