使用Enter键导航到AG-Grid

时间:2017-10-06 14:28:04

标签: navigation cell edit ag-grid

我们需要在 AG-Grid 中编辑单元格导航,但我找不到办法来做我们需要的工作。这不是一个巨大的变化,而是对我们用户的重大改变。我们需要的导航规则类似于Google电子表格单元格导航。

以下规则应适用:

  • 输入将关注单元格(默认设置)
  • 再次按输入将停止编辑 +将焦点移至下方的单元格
  • shift + enter 应停止修改 +将焦点移至上方的单元格
  • 箭头键 和Tab等应该像正常一样工作

我们正在使用AngularJS。

2 个答案:

答案 0 :(得分:5)

  

编辑:

     

此功能已添加到AG-Grid!   Documentation here.

原创(过时)回答:

我们最终在AG-Grid论坛上提问。没有简单或干净的方法来做到这一点。基本上你向网格添加一个事件,该事件监听被按下的'Enter',然后手动将焦点向下移动一行。

当'Enter'事件被触发时,您必须知道用户当前是否正在编辑,并且还要注意用户是否在最后一行。

gridDiv.addEventListener('keydown', function(evt) {
  if(editing && evt.key === 'Enter') {
      var currentCell = gridOptions.api.getFocusedCell();
      var finalRowIndex = gridOptions.api.paginationGetRowCount()-1;

      // If we are editing the last row in the grid, don't move to next line
      if (currentCell.rowIndex === finalRowIndex) {
          return;
      }
      gridOptions.api.stopEditing();
      gridOptions.api.clearFocusedCell();

      gridOptions.api.startEditingCell({
        rowIndex: currentCell.rowIndex + 1,
        colKey: currentCell.column.colId
      });
  }
});

编辑标志在网格选项中手动管理。

var editing = false;

var gridOptions = {
    columnDefs: columnDefs,
    rowData: students,
    onCellEditingStarted: function (evt) {
        editing = true;
    },
    onCellEditingStopped: function (evt) {
        editing = false;
    }
};

这是一个有效的例子:
https://plnkr.co/edit/quhyS05SSVzmuDlCErZD?p=preview

答案 1 :(得分:0)

你也可以使用' keydown'事件全局跟踪最后按下的键,这是你的答案的变体。

let eventKey;
let validKeys = ['Enter'];

gridDiv.addEventListener('keydown', function(event) {
    eventKey = event.key;
});

onCellEditingStopped: function (event) {
    if(validKeys.includes(eventKey)){
        var currentCell = gridOptions.api.getFocusedCell();
        var finalRowIndex = gridOptions.api.paginationGetRowCount()-1;

        if (currentCell.rowIndex === finalRowIndex) {
            return;
        }

        gridOptions.api.startEditingCell({
            rowIndex: currentCell.rowIndex + 1,
            colKey: currentCell.column.colId
        });
    }
}