2012-01-24 26 views
3

SlickGrid支持可以配置为单击或双击显示的单元格的编辑器。但是我没有看到一个选项,其中,编辑器默认情况下为所有单元格可见,而不必单击/双击单元格。SlickGrid - 带控件的可编辑网格默认情况下是可见的

  • 是否有可能支持编辑器默认情况下编辑器为 “光荣网格”的编辑器所有单元格?
  • 是否有已知的解决方法?

谢谢。

回答

1

不可以。网格设计为一次可编辑一个单元格。

+0

谢谢你的回应......我目前正在尝试一个解决方案来模拟一个格式编辑器作为编辑器 - 比需要更复杂,但我想它应该做的伎俩。 –

+1

只要确保没有将任何事件侦听器直接附加到由SlickGrid生成的DOM上,或者以任何方式在外部修改它。滚动时,SlickGrid会销毁并重新创建行节点。使用网格提供的事件或在容器上侦听(即使用事件委托)。 – Tin

+0

当然,非常感谢Tin,我们实际上学到了一些难以实现的方法......因为我们需要将事件与某些DOM节点相关联。我们可能不得不为此执行一些遗憾的解决方法。 我们在Formatter的返回值中打开了DOM支持的功能请求,我相信它会在GitHib站点上回复给您:D 我不确定推荐是否100%可能,但我们已经提出了一张票(Feature请求)。 Ticket:https://github.com/mleibman/SlickGrid/issues/269 –

2

我知道这不是你要求的,但我想我会添加下面的代码以防万一有人发现它有用。这是一种半解决方法,它至少让用户在网格周围导航,并开始在单元格中输入内容进行编辑,而不必通过按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(); 
     } 
    } 
    } 
} 
+0

嗨Njr,不完全是我们想要的,但是这很有趣。感谢分享这个。我们可能能够很好地使用其他项目。 –

1

下面是我结束了(改进版本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(); 
0

更新使用编辑器定义行的元数据,而不是在列定义。

在我的情况下,一行两个包含在单元格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(); 
       } 
      } 
     } 
    }); 
相关问题