Гибкая ширина столбца сетки данных
-
18-09-2019 - |
Вопрос
В моем приложении flex я сохраняю ширину и видимость столбцов в xml-файле.Когда приложение загружается, оно считывает данные из xml-файла и устанавливает соответствующие значения столбцов:
for(i = 0; i < columnsOrder.length; i++){
newOrder[i] = myDG.columns[Number(columnsOrder[i]) - 1];
newOrder[i].visible = (Number(columnsVisiblity[i]) == 1);
newOrder[i].width = Number(columnsWidth[i]);
}
myDG.columns = newOrder;
myDG.invalidateList();
Проблема, по-видимому, заключается в настройке видимости (она правильно устанавливает видимое поле, но изменяет ширину)...Я пробовал устанавливать его после установки ширины (вне цикла), а также перед циклом.Он изменяет размеры столбцов должным образом, если я ничего не делаю с видимостью.
Есть какие-нибудь идеи?
Решение
Добавьте инструкцию import в верхней части вашего файла класса:
импорт mx.core.mx_internal;
Затем удалите, используя пространство имен mx_internal, удалите владельца столбца, измените ширину и затем переназначьте родительский:
public static function resizeColumn(col:DataGridColumn, size:int):void
{
var owner:* = col.mx_internal::owner
col.mx_internal::owner = null;
col.width = size;
col.mx_internal::owner = owner;
}
Это должно сработать (ну, у нас получилось после пары дней ругани).
Другие советы
Установлена ли ваша horizontalScrollPolicy в false в datagrid?
"Если свойство horizontalScrollPolicy для DataGrid равно false, все видимые столбцы должны умещаться в отображаемой области, и DataGrid не всегда будет учитывать ширину столбцов, если общая ширина столбцов слишком мала или слишком велика для отображаемой области".
http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridColumn.html#width
Я смог заставить его работать, дважды вызвав приведенный выше цикл в функции...в первый раз, когда он добавляет видимые столбцы, во второй раз он устанавливает правильную ширину.Не самое лучшее решение, но я не могу больше тратить на это время.