【问题标题】:Kendo grid resizable column width剑道网格可调整大小的列宽
【发布时间】:2013-12-04 15:57:11
【问题描述】:

网格列可以调整大小。我想存储用户调整的列宽并在下一个会话开始时恢复它们。

我发现存储列宽的最佳方法如下:

var element = $('#grid').kendoGrid({
   ...
    resizable: true,
    columnResize: function(e) {
        var state = {};
        this.columns.every(function(c,i) {
            state[c.field] = c.width;
            return true;
        });
        var state_txt = JSON.stringify(state);
        localStorage['profile_userprofile_grid_column_width'] = state_txt;
    }
}

现在我想恢复之前用户会话中保存的列宽。我可以从存储中读取列宽:

var state = JSON.parse(localStorage['profile_userprofile_grid_column_width']);

如果此时已经创建了网格,是否有人知道将这些值应用回网格的优雅方法?调整大小句柄在内部进行,所以可以,但是在网格源中这样做的代码很难看。

【问题讨论】:

  • 您的问题找到解决方案了吗?

标签: kendo-ui kendo-grid


【解决方案1】:

您可以触发columnResize事件后初始化,如下所示

function grid_columnResize(e) {
  // Put your code in here
  console.log(e.column.field, e.newWidth, e.oldWidth);
}
$("#grid").kendoGrid({
  columns: [
    { field: "name" },
    { field: "age" }
  ],
  dataSource: [
    { name: "Jane Doe", age: 30 },
    { name: "John Doe", age: 33 }
  ],
  resizable: true
});
var grid = $("#grid").data("kendoGrid");
grid.bind("columnResize", grid_columnResize);

Documentation

【讨论】:

  • 您的代码不会触发 columnResize 事件,而是绑定 columnResize 事件处理程序。无论如何,触发事件并没有帮助,可能是因为事件本身是由调整大小句柄真正调整列大小后生成的。下面的代码触发了事件,但它没有帮助: g = $('#grid') gg = g.getKendoGrid() gg.trigger('columnResize',{column:gg.columns[1],oldWidth: gg.columns[1].width,newWidth:400,sender:gg}) (不知道,为什么代码没有按照帮助中的描述格式化)
  • 我的错误我应该说bind而不是trigger。 “没有帮助”是什么意思?代码有什么作用吗?
  • 我的意思是我的代码手动触发 columnResize 事件不会导致调整屏幕上的列大小,尽管会导致为 columnResize 事件调用事件处理程序。我想恢复列的宽度,即 - 在 columnResize 事件上将其存储到本地存储(原始帖子中的代码执行此操作),当下一个会话开始时,从本地存储读取它并将其传递给网格,因此网格将具有与之前会话中相同的列宽。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2020-09-30
  • 2023-03-06
  • 1970-01-01
  • 2012-03-24
相关资源
最近更新 更多