首页 > 解决方案 > 如何以编程方式设置或更改具体单元格的值?

问题描述

使用纯数组作为数据源(不是 DateView)来初始化 SlickGrid,我想在特定行/列(单元格)上创建网格后更改一个值。

这是一个简单的例子,也可以作为一个工作的 JSFiddle找到,例如,我想将第 3 行(“任务 2”)上的“持续时间”的值从“5 天”更改为“7 天”。

<div id="myGrid" style="width:400px;height:400px;"></div>   

<script>
  var grid;
  var columns = [
    {id: "title", name: "Title", field: "title"},
    {id: "duration", name: "Duration", field: "duration"},
    {id: "%", name: "% Complete", field: "percentComplete"},
    {id: "start", name: "Start", field: "start"},
    {id: "finish", name: "Finish", field: "finish"},
    {id: "effort-driven", name: "Effort Driven", field: "effortDriven"}
  ];

  var options = {
    enableCellNavigation: true,
    enableColumnReorder: false
  };

  $(function () {
    var data = [];
    for (var i = 0; i < 500; i++) {
      data[i] = {
        title: "Task " + i,
        duration: "5 days",
        percentComplete: Math.round(Math.random() * 100),
        start: "01/01/2009",
        finish: "01/05/2009",
        effortDriven: (i % 5 == 0)
      };
    }

    grid = new Slick.Grid("#myGrid", data, columns, options);
    grid.setSelectionModel(new Slick.CellSelectionModel());

    /* needed method */
    grid.setCellValue(2, 1, "7 days");
    /* or */
    grid.setCellValue(2, "duration", "7 days");

  })
</script>

它看起来像一个方法

grid.setCellValue(row, column, value);

不存在。

有没有一种方法(或我还没有找到的现有方法)可以在不使用 DataView 的情况下实现这一点?

标签: slickgrid

解决方案


只需使用

data[2].duration = "7 Days";

然后刷新网格:

grid.invalidateAllRows();
grid.render();

网格只有显示相关的辅助方法,尽管您可以使用grid.getData(). 编辑器,如果您使用它们,包含从行 ( data[n]) 中提取值并将其写入编辑器 UI 的代码,然后以另一种方式返回。


推荐阅读