SlickGrid - редактируемая сетка с элементами управления, видимыми по умолчанию - PullRequest
3 голосов
/ 24 января 2012

SlickGrid поддерживает редакторы для ячейки, которые можно настроить для отображения при щелчке или двойном щелчке.Однако я не вижу варианта, по которому редактор по умолчанию ВИДИМ для всех ячеек без необходимости щелкать / дважды щелкать по ячейке.

  • Можно ли поддерживать редакторов в скользкой сетке, гдеРедакторы по умолчанию "init" для всех ячеек?
  • Есть ли известный обходной путь?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 24 января 2012

Я знаю, что это не совсем то, что вы просили, но я подумал, что добавлю приведенный ниже код на тот случай, если кто-нибудь посчитает его полезным. Это полуобходное решение, и оно, по крайней мере, позволяет пользователю перемещаться по сетке и начинать вводить в ячейку для редактирования, без необходимости сначала «инициализировать» редактирование, нажав Enter или дважды щелкнув по ячейке; немного похоже на редактирование листа MS Excel.

myGrid.onKeyDown.subscribe(function (e, args) {
  var keyCode = $.ui.keyCode,
      col,
      activeCell = this.getActiveCell();

  /////////////////////////////////////////////////////////////////////
  // Allow instant editing like MS Excel (without presisng enter first
  // to go into edit mode)
  if (activeCell) {
    col = activeCell.cell;

    // Only for editable fields and not if edit is already in progress
    if (this.getColumns()[col].editor && !this.getCellEditor()) {
      // Ignore keys that should not activate edit mode
      if ($.inArray(e.keyCode, [keyCode.LEFT, keyCode.RIGHT, keyCode.UP,
                               keyCode.DOWN, keyCode.PAGE_UP, keyCode.PAGE_DOWN,
                               keyCode.SHIFT, keyCode.CONTROL, keyCode.CAPS_LOCK,
                               keyCode.HOME, keyCode.END, keyCode.INSERT,
                               keyCode.TAB, keyCode.ENTER]) === -1) {
        this.editActiveCell();
      }
    }
  }
}
1 голос
/ 21 мая 2013

Ниже приведено то, что я закончил (улучшенная версия ответа njr101), чтобы заставить эту работу. Я добавил проверку ключа CTRL, чтобы он не нарушал плагин копирования и вставки, который я использую в сетке.

function (e) {
var keyCode = $.ui.keyCode,
    col,
    activeCell = this.getActiveCell(),
    activeCellNode = this.getActiveCellNode();

var isInEditMode = $(activeCellNode).hasClass("editable");

if (activeCell && !isInEditMode) {
    col = activeCell.cell;

    if (this.getColumns()[col].editor  && !e.ctrlKey) {
        if ($.inArray(e.keyCode, [keyCode.LEFT, keyCode.RIGHT, keyCode.UP,
            keyCode.DOWN, keyCode.PAGE_UP, keyCode.PAGE_DOWN,
            keyCode.SHIFT, keyCode.CONTROL, keyCode.CAPS_LOCK,
            keyCode.HOME, keyCode.END, keyCode.INSERT,
            keyCode.TAB, keyCode.ENTER]) === -1) {

            this.editActiveCell();
        }
    }
}

};

и не забудьте подписаться:

slickGrid.onKeyDown.subscribe();
1 голос
/ 24 января 2012

Нет.Сетка предназначена для редактирования по одной ячейке за раз.

0 голосов
/ 01 октября 2015

Обновление для использования определения редактора в метаданных строки, а не в определении столбца.

В моем случае одна строка из двух содержится в текстовом редакторе ячейки 1, а одна строка из двух ничего не содержит.

    grid.onKeyDown.subscribe( function ( e, args ) {
        var keyCode = $.ui.keyCode;
        var activeCell = this.getActiveCell();

        if( activeCell ) {

            // get metadata
            var columnDefinition = grid.getColumns()[ activeCell.cell ];
            var rowMetadata = dataView.getItemMetadata && dataView.getItemMetadata( activeCell.row );
            var rowColMetadata = rowMetadata && rowMetadata.columns;
            rowColMetadata = rowColMetadata && ( rowColMetadata[ columnDefinition.id ] || rowColMetadata[ activeCell.cell ] ); 

            if ( rowColMetadata && rowColMetadata.editor && !this.getCellEditor() ) {

                if( $.inArray( e.keyCode, [keyCode.LEFT, keyCode.RIGHT, keyCode.UP, keyCode.DOWN, keyCode.PAGE_UP, keyCode.PAGE_DOWN,
                                       keyCode.SHIFT, keyCode.CONTROL, keyCode.CAPS_LOCK, keyCode.HOME, keyCode.END, keyCode.INSERT,
                                       keyCode.TAB, keyCode.ENTER]) === -1 ) {
                    this.editActiveCell();
                }
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...