如何从控制器更新 Kendo UI Grid 数据源?

Posted

技术标签:

【中文标题】如何从控制器更新 Kendo UI Grid 数据源?【英文标题】:How to update KendoUI Grids datasource from the controller? 【发布时间】:2021-08-03 10:16:02 【问题描述】:

我正在尝试使用以下代码更新网格的数据源。但我只想更新一个特定的列,我不想重新加载整个网格。我们至少有 100 条记录显示,但加载需要几秒钟。我们有这样的逻辑,即用户扫描条形码并将更新列。现在它会加载之后的所有内容。

是否可以只更新特定列而不加载整个网格?

$("#GridCreateShipment").data('kendoGrid').dataSource.read();


 @(html.Kendo().Grid<ProductionShipment>()
          .Name("GridCreateShipment")
          .AutoBind(true)
          .Filterable(filter => filter.Extra(false).Operators(op => op.ForString(str => str.Clear().Contains("Contains"))))
          .Columns(columns =>
          
         
              columns.Bound(p => p.OrderNo).Title("Order No.").Width(150).Filterable(false);
              columns.Bound(p => p.DetailNum).Title("Line No.").Groupable(false).Encoded(false).Filterable(false).Width(60);
              columns.Bound(p => p.ShipdateString).Title("Ship Date").Groupable(false).Encoded(false).Filterable(false).Width(100);
              columns.Bound(p => p.CustomerName).Title("Customer").Filterable(false).Width(150);
              columns.Bound(p => p.CustomerShipTo).Title("Customer Ship-To").Filterable(false).Width(150);
              columns.Bound(p => p.CustomerPO).Title("PO No.").Filterable(false).Width(90);
              columns.Bound(p => p.ItemId).Title("Item ID").Filterable(false).Width(200);
              columns.Bound(p => p.ItemDescription).Title("Description").Width(300).Filterable(false);
              columns.Bound(p => p.OrigQty).Title("Orig Qty").Filterable(false).Width(100);
              columns.Bound(p => p.QtyProduced).Title("Qty Produced").Filterable(false).Width(100);
              columns.Bound(p => p.QtyLoaded).Title("Qty Loaded").Filterable(false).Width(100);
              //columns.Bound(p => p.Routes).Filterable(false).Width(200);

          )
      
          .DataSource(dataSource => dataSource
              .Ajax()
              //BTG v.1.1.62 
              //Removed
              //.Sort(x=>x.Add("OrderNo").Ascending())
              .Read(read => read.Action("GridFillCreateShipment", "Production").Data("additionalData"))
              

          )

          ) 

【问题讨论】:

【参考方案1】:

试试这样的:

首先您需要从控制器中获取作为对象的值,其次从当前网格中获取数据项/行,最后使用"dataItem.set()" 更改列的值(这会将您的网格的视图更新为好吧,而不是重新加载整个网格)

var data = //controller return;
var grid = $("#GridCreateShipment").data("kendoGrid");
var dataItem = grid.dataSource.get(data.ItemId);
dataItem.set("Customer","Devina");

您可以尝试此解决方案,但我仍然建议您在每次进行更改时更新所有记录,如果您不想每次都重新加载整个(100 条记录),您可以限制显示的记录在当前网格上(使用 pageSize 或 Pagination ),这只会加载该 pageSize 的记录数。

希望这能回答你的问题。

【讨论】:

以上是关于如何从控制器更新 Kendo UI Grid 数据源?的主要内容,如果未能解决你的问题,请参考以下文章

kendo ui grid 动态控制某属性

Kendo UI Grid添加新记录而不是将数据发布到服务器端

如何使用 Kendo UI Grid 的 SetDataSource 方法

如何从 Kendo UI Grid 中的列模板访问列名?

Kendo UI Grid 内联编辑发布的数据为空

如何提高kendo ui grid在页面的渲染速度