Автоматическая ширина колонок в Grid

Бывают ситуации когда для grid’а не указываются размеры колонок, а нужно чтобы смотрелось хорошо

Некрасивая разметка

Для корректного просмотра списка есть несколько способов:

Способ №1

Применение параметр forceFit: true у grid’a. Данное свойство равномерно растягивает колонки по всей области грида

Если у колонки изначально будет указана ширина, то алгоритм будет немного меняться (как сам не знаю, но отображаться будет по другому). Для указания ограничения по ширине лучше применять maxWidth

Способ №2

Применение свойства enableAutoResizeColumns: true|false у grid’a. Ниже указан код

/**
* Переопределен
* @todo применяется для вычисления автоматической ширины колонок
*/
Ext.define('IServ.UI.Classic.grid.Panel', {
override: 'Ext.grid.Panel',

/**
* Включить или отключить автоматическое вычисление ширины для колонки
* @type {boolean}
* @default false
*/
enableAutoResizeColumns: false,

/**
* инициализация компонентов
*/
initComponent: function () {
this.callParent();
if (this.enableAutoResizeColumns) {
this.getStore().on('load', this.autoResizeColumns, this);
}
},

privates: {
/**
* автоматическое вычисление размера колонок
* @returns {boolean}
*/
autoResizeColumns: function () {
this.columns.forEach(function (column) {
if (column.flex == undefined
&& !column.cellWrap)
column.autoSize();
});
return true;
}
},

/**
* уничтожение объекта
*/
destroy: function () {
if (this.enableAutoResizeColumns) {
this.getStore().un('load', this.autoResizeColumns, this);
}
this.callParent(arguments);
}
})

Просто добавляем указанный код в проект и указываем enableAutoResizeColumns=true. Внимание! Для колонок у который flex  не указан и cellWrap = true вычисление не производиться, это сделано для того чтобы, колонка с большим текстом отображалась корректно.

Способ №3

Совместное использование обоих параметров. Но отображение не всегда однозначное.

Print Friendly, PDF & Email

Добавить комментарий