Проблема с шириной столбца Flex 3 DataGrid
-
19-09-2019 - |
Вопрос
Я извлекаю данные XML, чтобы определить, какие столбцы видны, а также ширину каждого столбца.Ширина моей сетки данных может измениться, поскольку она находится на одной стороне HDividedBox.Часть видимости работает, но установка ширины вызывает головную боль.Вот код:
for(loop through column data retrieve from XML)
{
newData[i] = dg.columns[Number(columnsOrder[i]) - 1];
newData[i].visible = (Number(columnsVisibility[i]) == 1);
newData[i].width = Number(columnsWidth[i]);
trace(newData[i].headerText + " w:" + newData[i].width.toString() + " v:" + newData[i].visible.toString());
}
dg.columns = newData;
dg.invalidateList();
В трассировке ширина правильна для первых двух элементов, однако она отображается как «20» для каждого последующего элемента...
Date w:240 v:true
Title w:184 v:true
Requestor w:20 v:true
Approved By w:20 v:true
Category w:20 v:false
Status w:20 v:false
Priority w:20 v:false
Когда я вывожу Number(columnsWidth[i]), он отображается как правильное значение, поэтому при назначении ширины происходит что-то странное.
Смотрю на это уже несколько часов и пробовал несколько вещей, чтобы попытаться это исправить, но безрезультатно.
Решение
Ширина моей сетки данных может измениться, поскольку она находится на одной стороне HDividedBox.
Вот в этом проблема.
Я столкнулся с той же проблемой с шириной DataGridColumn Flex 2 и Flex 3, когда ширина DataGrid не была фиксирована.Единственное решение, которое у меня было, — исправить ширину DataGrid или переключиться на AdvancedDataGrid или другие подобные компоненты.
Другие советы
Я сделал то же самое в AdvancedDataGrid, и это работает.Попробуйте установить эти значения
horizontalScrollPolicy="on"
width="100%
а затем добавьте столбцы, это должно работать с HDividedBox.
Вы можете это сделать, я считаю, что это ошибка в самом DataGrid.
Если вы установите minWidth="0" и HorizontalScrollPolicy="{ScrollPolicy.AUTO}" в DataGrid, вы сможете создавать объекты DataGridColumn с фиксированной шириной и правильно их соблюдать.
Однако, похоже, проблема с последним столбцом все еще существует: если DataGrid все еще больше суммы всех фиксированных ширин, он растянет окончательный DataGridColumn.
Вы можете обойти это, добавив в конце пустой столбец без текста заголовка и т. д.
Хорошо, мы сами столкнулись с этим, когда создавали поддержку различных режимов ширины столбцов.Немного информации: если вы хотите явно установить ширину, убедитесь, что вы делаете что-то вроде этого:
var oldPolicy:String = grid.horizontalScrollPolicy;
grid.horizontalScrollPolicy ="on"
//set your widths here
grid.horizontalScrollPolicy =oldPolicy;