2012-01-24 3 views
3

SlickGrid поддерживает редакторы для ячейки, которую можно настроить для отображения при щелчке или двойном щелчке. Однако я не вижу опции, где, по умолчанию, редактор VISIBLE для всех ячеек, не щелкая/дважды щелкнув по ячейке.SlickGrid - редактируемая сетка с элементами управления Видимый по умолчанию

  • Можно ли поддерживать редактор в гладком сетке, где редактора «инициализация» по умолчанию для всех ячеек?
  • Есть ли известное обходное решение?

спасибо.

ответ

1

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

+0

Спасибо Tin за ответ ... Я сейчас пытаюсь найти решение для имитации Formatter как редактор - немного сложнее, чем это необходимо, но я предполагаю, что это следует сделать трюк. –

+1

Просто убедитесь, что вы не подключаете прослушивателей событий к DOM, сгенерированным SlickGrid, напрямую или каким-либо образом модифицируете его. SlickGrid уничтожает и воссоздает узлы строк при прокрутке. Используйте события, предоставляемые сеткой, или слушайте в контейнере (например, используйте делегирование событий). – Tin

+0

Несомненно, спасибо Tin, мы на самом деле научились этому трудно, так как нам нужно было связать события с некоторыми узлами DOM. Возможно, нам придется выполнить некоторые изредка. Мы открыли запрос функции поддержки DOM в возвращаемом значении Formatter, и я верю, что он вернется к вам на сайте GitHib: D Я не уверен, что рекомендация на 100% возможна, но мы подняли билет (Feature Запрос). Билет: https://github.com/mleibman/SlickGrid/issues/269 –

2

Я знаю, что это не совсем то, о чем вы просили, но я подумал, что добавлю код ниже, если кто-нибудь найдет его полезным. Это временное решение и, по крайней мере, позволяет пользователю перемещаться по сетке и начинать вводить в ячейку для редактирования, без необходимости «сначала инициализировать» редактирование, нажав «Ввод» или дважды щелкнув ячейку; немного похоже на редактирование листа 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(); 
     } 
    } 
    } 
} 
+0

Привет Нджр, Не совсем то, что мы хотим, но да, это интересно. Спасибо, что поделились этим. Возможно, мы сможем использовать его в другом проекте. –

1

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

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(); 
0

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

В моем случае одна строка из двух содержит текстовый редактор ячейки 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(); 
       } 
      } 
     } 
    });