DataGrid имеет следующие характеристики по умолчанию:
Размер по умолчанию - если таблица пуста, ширина по умолчанию равна
300 px. Если колонки содержат информацию, но не имеют фиксированных
размеров, ширина каждой колонки равна 100 px. По умолчанию
отображаются семь рядов, включая заголовок, каждый ряд высотой 20 px.
On Aug 25, 1:22 pm, Sergei Shichinov <shichinov.ser...@gmail.com>
wrote:
если есть явная ширина родительской колонки - включается механизм
подрезающий текст при необходимости
если ширина колонки неуказана - измеряется текст и measured ширина
рендера выставляется по нему
плюс у грида механизм подбора ширины колонки завязан еще и на политику
горизонтального скролла.
точно не помню что там еще - но если h скрол отключен он старается
запихать все колонки в доступную ширину
советую поковырять и в этом направлении.
у меня не так давно была задача сделать алгоритм подбора оптимальной
ширины колонок грида - я постарался ее спустить на тормозах.. :))
--
С уважением, Скорик Андрей. andrew...@gmail.com
у меня не так давно была задача сделать алгоритм подбора оптимальной
ширины колонок грида - я постарался ее спустить на тормозах.. :))
Изменил функцию autoSizeColumns:
public function autoSizeColumns(e:*=null):void {
...
for (col = 0; col < widths.length; col++) {
...
for each(var o:Object in dataProvider.source) {
renderer.text = o[dgCol.dataField];
if((dgCol is DataGridColumn) || (dgCol is AutoResizeDataGridColumn
&& dgCol.autoSize)){
widths[col] = Math.max(renderer.measuredWidth + 15, widths[col]);
}
if(dgCol is AutoResizeDataGridColumn && !dgCol.autoSize) {
widths[col] = dgCol.width;
}
}
}
removeChild(renderer);
...
А вот пробежаться по всем итемам измерить каждый и выбрать например
наибольший - уже ресурсоемкая такая задача получается..
>всё работает, то только
> DataGrid расширяется по ширине текста, который в названии колонки. А
> мне надо в содержимом самой таблицы.
Ну если записей не порядка миллиона то нормально,
если у вас только текстовые поля то можно использовать такой алгоритм:
при получении данных, пробегаетесь по вашим данным и выбираете самые
длинные записи у столбцов, запоминаете их (AS3 довольно быстро гоняет
большие циклы :)
затем используя метод у грида (или конкретного рендера если
используються кастомные стили)
measureHTMLText(str);
или
measureText(str); // (они есть во всех в UIComponent и учитывают его стили)
высчитываете ширину конкретных соответствующих столбцов и сразу
забиваете эту ширину в гриды.
по идее это действо нужно выполнить только 1 раз. Если данные меняются
со временем то, можно пересчитывать, используя уже первично
посчитанные данные (после первого запуска)
--
Ilja Panin
http://the33cows.com