Extjs grid - как сделать ширину столбца 100%
Свойство 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%
или если у меня есть несколько столбцов - как сделать последнее растяжение столбца до конца сетки?
Ответы
Ответ 1
Для 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'
}
});
Ответ 2
Добавьте flex : 1
в столбец, который вы хотите растянуть.
Ответ 3
Для ExtJS 4 используйте flex вместо ширины. Если вы установите flex: 1, и будет только один столбец, он займет 100% ширину. Если у вас есть два столбца и установите flex: 1 на обоих, обе будут иметь ширину 50%.
Flex распределяет доступную ширину между столбцами по коэффициенту. Например, вы можете сказать flex: 2 для одного столбца и flex: 1 для двух других столбцов, и результат будет таким, что первый из них будет в два раза больше ширины двух других. Вы также можете использовать десятичные значения для flex, например. 0.5
Ответ 4
Обратите внимание, что если у вас есть один столбец в вашей сетке, существует значительная разница между использованием обозначений 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.
Ответ 5
установить Flex на 1
Column.Flex = 1;