【问题标题】:Batch update Kendo UI Grid Changing values dynamically批量更新 Kendo UI Grid 动态更改值
【发布时间】:2017-10-26 04:19:12
【问题描述】:

我有这个剑道 ui 网格绑定到一个表。此网格具有激活的批量编辑功能。这意味着我可以直接在网格单元格上更改值并保存它。

我想要完成的是通过每行运行一个循环来更改客户端某些列中显示的值,然后点击保存按钮。

这是我的网格中的内容:

 @(Html.Kendo().Grid<TokenEncrypt.Models.SellerEntity>()
  .Name("grid")

  .Columns(columns =>
  {
      columns.Bound(c => c.Name);
      columns.Bound(c => c.EntityId);
      columns.Bound(c => c.SellerEntityTypeId);
      columns.Bound(c => c.CompanyId);
      columns.Bound(c => c.IsActive);
      columns.Bound(c => c.AwsAccessKeyId);
      columns.Bound(c => c.SecretAccessKey);
  })
  .HtmlAttributes(new { style = "height: 500px;" })
  .Scrollable()      
  .Editable(editable => editable.Mode(GridEditMode.InCell))
  .ToolBar(toolbar =>
  {
       toolbar.Save();
  })


  .DataSource(dataSource => dataSource
      .Ajax()
      .Read(read => read.Action("SellerEntities_Read", "Grid"))
      .Update(update => update.Action("SellerEntities_Ubdate", "Grid"))
      .Batch(true)
      .Model(model =>

      {
          model.Id(c => c.EntityId);
      }
      )

      )

        )

这是我循环中的内容:(我不知道如何删除该值并将新值放入网格单元格中。

 function gridChange() {

    var grid = $("#grid").data("kendoGrid");
    grid.dataSource.read();
    var count = grid.dataSource.total();
    $("#countElement").html('Encrypting ' + count + ' Lines');

    // get data from the grid
    var gridData = $("#grid").data().kendoGrid.dataSource.view();
    var grid = $("#grid").data("kendoGrid");
    // loop rows
    for (i = 0; i < count; i++) {

        str = gridData[i].EntityId;
        EntityIdhash = CryptoJS.SHA256(str);

        // remove old value
        // enter new value

        console.log('EntityId: ' + gridData[i].EntityId + '\n'); 
        console.log('EntityId encrypted: ' + EntityIdhash + '\n'); 

    }

};

【问题讨论】:

  • 好的,据我了解,您对网格进行了更改。然后你想点击“保存”按钮,让它循环遍历你更改的每一行并保存这些更改?
  • 是的@Keith,你说得对
  • 您使用内联编辑还是必须单击按钮来编辑行?
  • 首先,从我们所看到的情况来看,您似乎没有调用gridChange 函数。除非您在document.ready 中初始化此事件或其他什么?
  • @Sandman,我有新的编辑值。我只想一口气完成。此功能将由一个按钮触发并执行按钮更改。

标签: javascript jquery kendo-ui kendo-grid datasource


【解决方案1】:

您可以执行以下操作(无需查看任何 HTML):

$('#save').on('click', function () {
    success();
})

function success() {
    var storedValues = [];
    var gridData = $("#grid").data().kendoGrid.dataSource.data();
    for (var i = 0; i < gridData.length; i++) {
        if (gridData[i].EntityId) {
            storedValues.push({
                cellValue: gridData[i].EntityId,
            });
        }
    }
    var inputData = { yourVariable: JSON.stringify(storedValues) };
    $.ajax({
        cache: false,
        type: 'POST',
        url: "/YourController/Here",
        data: inputData
    }).done(function (data) {
       // success here
            $('#grid').data('kendoGrid').refresh();
        }
    });
};

【讨论】:

  • 在这种情况下,您更改值并将它们存储在数组中以便在 json 中发布。我想要的结果是在网格中发生变化,之后我将决定是否保存。这是批量编辑行为。附言我没有使用 razor 语法来创建网格的 HTML。
  • 默认情况下,editable:true 为您提供基于字符串或数字的单元格编辑,您可以立即更改,当您将注意力从单元格上移开时,新元素仍然存在。这不是表现得应该的方式吗?对单元格进行编辑时会发生什么?
  • 也许我没有在解释自己。我想要的是自动进入每个单元格并更改值。之后我会决定是否点击保存按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多