ExtJs合并单元格

前端框架ExtJS4.0

下图为合并后效果:


最近项目中做Grid显示时,需要将单元格分类然后按一定要求给合并,如果单单是合并表头,这个实现很简单,但是现在要求的合并单元格,这就需要直接去操作HTML表格标签了,进行rowspan,colspan之类;下面是具体代码:

注:grid为要合并的表单,row为合并的开始行,col为合并的开始列,type['row','col']要合并列或者行,num合并的行数或者列数

function span(grid, row, col, type, num) {
    switch (type) {
        case 'row':
            tds = Ext.get(grid.view.getNode(row)).query('td');
            Ext.get(tds[col]).set({rowspan: num});
            Ext.get(Ext.get(tds[col])).setStyle({'vertical-align': 'middle'});
            for (i = row + 1; i < row + num; i++) {
                Ext.get(Ext.get(grid.view.getNode(i)).query('td')[col]).destroy();
            }
            break;
        case 'col':
           tds = Ext.get(grid.view.getNode(row)).query('td');
            Ext.get(tds[col]).set({colspan: num});
            Ext.get(Ext.get(tds[col])).setStyle({'vertical-align': 'middle'});
            for (i = row + 1; i < row + num; i++) {
                Ext.get(tds[col+1]).destroy();
            }
            break;
    }
}

监听load:根据自己的业务逻辑来设计代码

load: function(){

//遍历store
            var models = compareFinceStore.data;
            var length = models.length;
            for (var index = 0; index < length; index++) {//行
                var rows = 0;
                var record = models.get(index); 
                var obj = record.get('saleOrderNumber');

                for (var index2 = index; index2 < models.length; index2++) {l//匹配每一行相同列

                    var record2 = models.get(index2);
                    if (obj == record2.get('saleOrderNumber')) {
                        rows++;
                    } else {
                        continue;
                    }
                }

//合并15,14,13,10,3,2列 注意:这里如果你是顺序合并的话或出现合并后剩余数据挤到下一列的问题,需要倒序进行合并解决问题
               var cols = [15,14,13,10,3,2];
                if (rows > 1) {
                  for(var i=0;i<cols.length;i++){
                      span(compareFinceReport_grid, index, cols[i], 'row', rows);
                  }
                    index += rows - 1;
//直接跳转到合并后的下一行
                }
            }

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Ext.grid.feature.Grouping 插件来进行单元格合并。以下是示例代码: ``` Ext.create('Ext.grid.Panel', { title: 'My Grid Panel', store: myStore, columns: [ { text: 'Name', dataIndex: 'name', flex: 1 }, { text: 'Age', dataIndex: 'age', flex: 1 }, { text: 'Salary', dataIndex: 'salary', flex: 1 } ], features: [{ ftype: 'grouping', groupHeaderTpl: '{columnName}: {name} ({rows.length})', hideGroupedHeader: true, startCollapsed: true, groupByText: 'Group by this field' }], renderTo: Ext.getBody() }); ``` 在上述代码中,我们创建了一个包含三列的 GridPanel,并使用 Ext.grid.feature.Grouping 插件进行了单元格合并。我们使用 groupHeaderTpl 属性来指定分组的标题,hideGroupedHeader 属性来隐藏已分组的列的标题,startCollapsed 属性来指定分组初始时是否折叠,groupByText 属性来指定分组菜单项的文本。 如果您想要根据特定的列进行分组和合并,则可以使用 groupField 属性来指定要分组的列的名称。例如: ``` Ext.create('Ext.grid.Panel', { title: 'My Grid Panel', store: myStore, columns: [ { text: 'Name', dataIndex: 'name', flex: 1 }, { text: 'Age', dataIndex: 'age', flex: 1 }, { text: 'Salary', dataIndex: 'salary', flex: 1 } ], features: [{ ftype: 'grouping', groupHeaderTpl: '{columnName}: {name} ({rows.length})', hideGroupedHeader: true, startCollapsed: true, groupByText: 'Group by this field', groupField: 'age' }], renderTo: Ext.getBody() }); ``` 在上述代码中,我们将 groupField 属性设置为 'age',这意味着我们将根据 'age' 列进行分组和合并。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值