Сетка extjs - как сделать ширину столбца 100% - PullRequest
12 голосов
/ 01 июля 2011

Свойство 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 ]

28 голосов
/ 01 июля 2011

Для ExtJS3, установите forceFit на GridPanels viewConfig.См .: http://dev.sencha.com/deploy/ext-3.4.0/docs/?class=Ext.grid.GridView

Для ExtJS 4 установите forceFit непосредственно на GridPanel: http://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'       
    }
});
9 голосов
/ 29 августа 2012

Добавьте flex : 1 к столбцу, который вы хотите растянуть.

2 голосов
/ 04 июня 2012

Для ExtJS 4 используйте flex вместо width.Если вы установите flex: 1, и есть только один столбец, он займет 100% ширины.Если у вас есть два столбца и установлено значение flex: 1 для обоих, ширина обоих будет 50%.

Flex распределяет доступную ширину между столбцами по соотношению.Например, вы можете сказать flex: 2 для одного столбца и flex: 1 для двух других столбцов, и в результате первый из них будет в два раза больше ширины двух других.Вы также можете использовать десятичные значения для flex, например, 0.5

0 голосов
/ 25 августа 2015

Обратите внимание, что если у вас есть один столбец в вашей сетке, существует существенная разница между использованием обозначений 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.

0 голосов
/ 29 мая 2014

установите Flex на 1

Column.Flex = 1;
...