Ag-Grid:如何保存和重新加载列顺序

tol*_*n64 5 javascript ag-grid

使用Ag-Grid,用户可以拖动列以自己喜欢的方式对其进行排序。我需要允许用户保存他们的列顺序(到SQL后端),以便它成为他们的默认列顺序。我试图获得像这样的列名:

var cols = schedGridOptions.columnApi.getAllColumns();
for (col in cols) {
    var colDef = col.getColDef();
    console.log(colDef.headerName);
}
Run Code Online (Sandbox Code Playgroud)

这是我找到的用于设置标题名称的示例,因此我尝试使其适应于获取标题名称。但是我得到这个错误:

JavaScript运行时错误:对象不支持属性或方法“ getColDef”

也许我没有正确执行此操作?我是刚开始使用Ag-Grid的人。寻找建议。

Ali*_*ogy 13

您正在寻找setColumnState()和getColumnState()。请参阅https://www.ag-grid.com/javascript-grid-column-api/中的文档

在网格选项中,为gridReady和columnMoved设置事件处理程序。 https://www.ag-grid.com/javascript-grid-events/

就像是:

gridOptions = {
   rowData: myRowDataSource,
   columnDefs: myColumns,
   onGridReady: onGridReady,
   onColumnMoved: onColumnMoved,
}
Run Code Online (Sandbox Code Playgroud)

在列移动事件上,保存columnState。这是保存到本地存储的示例。更改它以保存到您的数据库。

onColumnMoved(params) {
  var columnState = JSON.stringify(params.columnApi.getColumnState());
  localStorage.setItem('myColumnState', columnState);
}
Run Code Online (Sandbox Code Playgroud)

在网格就绪事件上,获取并还原网格状态。再次,更改它以从数据库中提取。

onGridReady(params) {
    var columnState = JSON.parse(localStorage.getItem('myColumnState'));
    if (columnState) {
      params.columnApi.setColumnState(columnState);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @SimonGerasimenko 和其他可能读到此内容的成员 - 在使用“applyColumnState”时需要添加一个额外的道具,即“applyOrder:true;”,如[本示例](https://www.ag-grid.com/javascript)所示-数据网格/列状态/)。 (11认同)
  • 如果您刚刚登陆这里,请注意:由于版本 24 setColumnState 已弃用,您应该使用 columnApi.applyColumnsState({ state: savingState }); 请参阅 https://www.ag-grid.com/javascript-grid-column-state/ (8认同)
  • @Sebastian 不适用于列顺序 (3认同)

rol*_*oli 12

onColumnMoved 每次列移动时都会触发,但拖动没有停止。

使用onColumnMoved根本没有性能。

如果你关心性能,你应该使用 onDragStopped

gridOptions.onDragStopped = function (params) {
  const colIds = params.columnApi.getAllDisplayedColumns().map(col => col.colId)
  console.log(colIds) // all visible colIds with the visible order
}
Run Code Online (Sandbox Code Playgroud)