extjs网格 - 如何使列宽100%

时间:2011-07-01 08:57:14

标签: grid extjs4

属性width是像素宽度。

{
                xtype: 'grid',
                store: store,
                selModel: Ext.create('Ext.selection.CheckboxModel', {
                    mode: 'SINGLE'
                }),
                layout: 'fit',
                columns: [
                    {
                        text: "pum",
                        dataIndex: 'SRD_NAME_FL',
                        width: 400
                    }
                ],
                columnLines: true
            }

如果我只有一列,我怎样才能使列宽= 100% 或者如果我有几列 - 如何使最后一列拉伸到网格结束?

5 个答案:

答案 0 :(得分:28)

对于ExtJS3,在GridPanels forceFit上设置viewConfig。请参阅:http://dev.sencha.com/deploy/ext-3.4.0/docs/?class=Ext.grid.GridView

对于ExtJS 4,直接在GridPanel上设置forceFithttp://docs.sencha.com/ext-js/4-0/#/api/-cfg-forceFit并将其与列上的flex结合使用。

v4的示例

var p = Ext.Create('Ext.grid.Panel',{
    forceFit: true,
    columns: [{
        xtype: 'gridcolumn',
        header: _ll.id,
        sortable: true,
        resizable: false,
        flex: 0, //Will not be resized
        width: 60,
        dataIndex: 'Id'
    }, {
        xtype: 'gridcolumn',
        header: __ll.num,
        sortable: true,
        resizable: true,
        flex: 1,
        width: 100,
        dataIndex: 'number'       
    }
});

v3的示例

var p = new Ext.grid.GridPanel({
    viewConfig: {
            forceFit: true
    },
    columns: [{
        xtype: 'gridcolumn',
        header: _ll.id,
        sortable: true,
        resizable: false,
        fixed: true, //Will not be resized
        width: 60,
        dataIndex: 'Id'
    }, {
        xtype: 'gridcolumn',
        header: __ll.num,
        sortable: true,
        resizable: true,
        width: 100,
        dataIndex: 'number'       
    }
});

答案 1 :(得分:9)

flex : 1添加到您要拉伸的列。

答案 2 :(得分:2)

对于ExtJS 4,使用flex而不是width。如果设置flex:1且只有一列,则宽度为100%。如果你有两列并且两者都设置了flex:1,则两者都有50%的宽度。

Flex按比例分配列之间的可用宽度。例如,你可以说flex:2表示一列,flex表示1表示另外两列,结果是第一列的宽度是另外两列的两倍。您也可以使用十进制值进行flex,例如0.5

答案 3 :(得分:0)

请注意,如果您的网格中只有一列,则使用items:[{}]items:{}表示法之间存在显着差异。

实际上这不会按预期工作(至少在ExtJS 4.2中):

Ext.define('My.SingleColumnGrid', {
    extend: 'Ext.grid.Panel',
    store: {type: 'someStore'},
    forceFit: true,
    columns: {
        items: [
            {
                text: 'Something',
                flex: 1,
                dataIndex: 'something'
            }
        ]
    }
});

如果您只是删除方括号,它会神奇地开始按预期工作(即您将有一个扩展到填充网格宽度的列)。

这几乎让我疯狂;-P。

答案 4 :(得分:-2)

将Flex设置为1

Column.Flex = 1;