2013-10-17 41 views
0

在Ext.grid.EditorGridPanel表如何拆分单元格,有两个或三排?Ext JS的EditorGridPanel - 如何拆分单元格中显示多行

像下面的图片

enter image description here

+0

哪个Ext JS的版本? – Krzysztof

+0

ExtJS的3.4版本 – shiva

+0

在内线4+很容易 - 你可以,而不是分裂,只设置rowspan的第一列细胞。另一方面,在Ext 3.4中并不那么容易。每行都被渲染为用div包裹的独立表格,所以rowspan将不起作用。最简单的方法可能是改变第一列中的单元格样式并将它们渲染到下面的单元格中。我稍后会想出一些事情。 – Krzysztof

回答

2

我成功地做到了一种行跨度,而不是行分裂的。海事组织更容易,它看起来像附加图像上的网格一样。示例代码:

var grid = new Ext.grid.EditorGridPanel({ 
    [...], 

    // hook up events 
    initComponent: function() { 
     Ext.grid.GridPanel.prototype.initComponent.call(this); 

     this.getView().on('refresh', this.updateRowSpan, this); 
     this.getView().on('rowupdated', this.updateRowSpan, this); 
    }, 

    onLayout : function(vw, vh) { 
     this.updateRowSpan(); 
    }, 

    // set span on rows 
    updateRowSpan: function() { 
     var columns = this.getColumnModel().config, 
      view = this.getView(), 
      store = this.getStore(), 
      rowCount = store.getCount(), 

      column = columns[0], // put propert column index here 
      dataIndex = column.dataIndex, 

      spanCell = null, 
      spanCount = null; 
      spanValue = null; 

     for (var row = 0; row < rowCount; ++row) { 
      var cell = view.getCell(row, 0), 
       record = store.getAt(row), 
       value = record.get(dataIndex); 

      if (spanValue != value) { 
       if (spanCell !== null) { 
        this.setSpan(Ext.get(spanCell), spanCount); 
       } 

       spanCell = cell; 
       spanCount = 1; 
       spanValue = value; 
      } else { 
       spanCount++; 
      } 
     } 

     if (spanCell !== null) { 
      this.setSpan(Ext.get(spanCell), spanCount); 
     } 
    }, 

    // set actual span on row 
    setSpan: function(cell, count) { 
     var view = this.getView(), 
      innerCell = Ext.get(cell.down('*')), 
      height = cell.getHeight(), 
      width = cell.getWidth(); 

     cell.setStyle('position', 'relative'); 
     if (count == 1) { 
      innerCell.setStyle('position', ''); 
      innerCell.setStyle('height', ''); 
      innerCell.setStyle('height', ''); 
     } else { 
      innerCell.setStyle('position', 'absolute'); 
      innerCell.setStyle('height', (height * count - cell.getPadding('tb') - innerCell.getPadding('tb')) + 'px'); 
      innerCell.setStyle('width', (width - cell.getPadding('lr') - innerCell.getPadding('lr')) + 'px'); 
     } 
    } 
}); 

此代码通过应用position: absolute和足够大的尺寸,以低于覆盖行改变了.x-grid3-cell-inner风格。请注意,您还必须应用一些不透明背景才能使其工作。工作样本:http://jsfiddle.net/RpxZ5/8/

我第一次写代码的Ext JS 4,如果你有兴趣,这里是工作示例:http://jsfiddle.net/wQSQM/3/

+0

这是完美的! – shiva

+0

它确实有效,但有一个问题。由于'.X-GRID3 - 细胞inner'施加'位置:absolute'的'forcefit'功能停止工作对于该行。你可以检查你提供的jsfiddle。任何想法如何解决? 这个问题只在3.4版本中。它可以与4.x一起使用 –

相关问题