C# 编辑时刷新Kendo UI MVC网格的ClientFooter模板

C# 编辑时刷新Kendo UI MVC网格的ClientFooter模板,c#,asp.net,kendo-ui,kendo-grid,kendo-asp.net-mvc,C#,Asp.net,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,我在ajax模式下使用KendoUI网格,并且有一个ClientFooterTemplate,其中包含一列的总和。这一切都很好,但如果我创建/更新或删除记录,ClientFooterTemplate不会更新,总和值保持不变 如何更新ClientFooterTemplate,以便在创建/更新或删除后总和值是最新的 这就是我迄今为止所尝试的: .Events(events => { events.SaveChanges("SaveChanges"); events.Remove

我在ajax模式下使用KendoUI网格,并且有一个ClientFooterTemplate,其中包含一列的总和。这一切都很好,但如果我创建/更新或删除记录,ClientFooterTemplate不会更新,总和值保持不变

如何更新ClientFooterTemplate,以便在创建/更新或删除后总和值是最新的

这就是我迄今为止所尝试的:

.Events(events =>
{
    events.SaveChanges("SaveChanges");
    events.Remove("Remove");
    events.Save("SaveChanges");
})
<script>
    function SaveChanges(e) {
        Reload(e.sender);
    }
    function Remove(e) {
        Reload(e.sender);
    }
    function Reload(obj) {
        obj.dataSource.read();
    }
</script>
.Events(Events=>
{
事件。保存更改(“保存更改”);
事件。移除(“移除”);
事件。保存(“保存更改”);
})
功能保存更改(e){
重新加载(如发送器);
}
功能删除(e){
重新加载(如发送器);
}
功能重新加载(obj){
obj.dataSource.read();
}

obj.dataSource.read()在实际请求更新之前执行。

您可能需要刷新网格的数据源。 所以在更新之后你可以像这样刷新它

 var grid = $("#ProposalGrid").data("kendoGrid");
             grid.dataSource.page(1) // or
             grid.dataSource.read() //if dataSource Read expects a paramater
             grid.dataSource.read( {paramNameAsDefinedInController : value });

您需要更新
数据源
并再次获取,如果您在网格页脚中使用聚合总和,则以下JavaScript将在每次创建/更新任何行时更新页脚总和

.DataSource(dataSource => dataSource
  .Ajax()
  .Aggregates(aggregates =>
  {
    aggregates.Add(p => p.WorkOrderDetailsQuantity).Sum();
    aggregates.Add(p => p.Total).Sum();                         
  })
.Events(e=>e.Edit("onEdit").Save("onSave"))

function onSave(e)
{
  //update the aggregate columns
  var dataSource = this.dataSource;
  e.model.one("change", function () {
    dataSource.one("change", function () {
      dataSource.aggregates().Total.sum;
    });
    dataSource.fetch();
  });
}

如果您不想重新加载数据,您可以随时执行以下操作(有点黑客行为…):

首先,对Save事件和SaveChanges事件使用不同的功能,例如:

.Events(events => {
    events.Save("Save");
    events.SaveChanges("SaveChanges");
    events.Remove("Remove")
})
其次,定义JavaScript方法,例如:

function Save(e) {
    if (e.value.Gewgaw) { // replace 'Gewgaw' with your column name
        var footer = $('tr.k-footer-template'),
            idx = 3, // replace 3 with the column index you want to aggregate
            aggregate = $(footer).children('td')[idx]; 

        // I had to delay the stuff in this function to get it to load properly
        setTimeout(function () { 
            var sum = 0;

            $('tr[role=row][data-uid]').each(function(i, e) {
                var $cell = $($(e).children()[idx]);

                /* do any necessary manipulations before this 
                   if your cell is formatted */
                var cellAmount = parseFloat($cell.text()); 

                sum += cellAmount;
            });

            /* do any necessary formatting to sum before this 
               if your cell is formatted */
            $(aggregate).text(sum); 
        }, 50); 
    }
}

如果您这样做并删除/添加适当的格式,则每次编辑相应单元格时,它都会更新聚合。

我确实尝试过这样做,但保存事件是在实际请求保存之前执行的。这就是我尝试的:.Events(Events=>{Events.SaveChanges(“SaveChanges”);Events.Remove(“Remove”);Events.Save(“SaveChanges”);})函数SaveChanges(e){Reload(e.sender);}函数Remove(e){Reload(e.sender);}函数Reload(obj){obj.dataSource.read();}它首先执行read()然后是实际的保存请求。Idk保存和保存更改之间的差异,但这两个事件可能相互冲突。尝试删除尽可能多的变量。因此,与其在SaveChanges之后调用Reload,不如执行读取。也许尝试一个不同的活动结束或改变可能