2009-08-19 3 views
2

Я вытягиваю xml данные, чтобы определить, какие столбцы видны, и ширины каждого столбца. Ширина моего datagrid может изменить sinces его с одной стороны HDividedBox. Часть видимости работает, но установка ширины вызывает головные боли. Heres код:Flex 3 DataGrid Column Width Problem

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]), он отображается как правильное значение, поэтому происходит что-то странное при назначении ширины.

Посмотрел на это в течение нескольких часов и попробовал несколько вещей, чтобы попытаться исправить это безрезультатно. ширина

ответ

3

Мой DataGrid может изменить sinces ИТС на одной стороне HDividedBox.

В этом проблема.

Я столкнулся с той же проблемой с шириной полосы данных Flex 2 и Flex 3 DataGridColumn, когда ширина для DataGrid не была исправлена. Единственное решение, которое у меня было, это исправить ширину DataGrid или переключиться на AdvancedDataGrid или другие аналогичные компоненты.

+0

Я думаю, что эта ошибка возникает если размер DataGrid слишком мал, чтобы вычислить столбцы, когда он будет создан. Одна работа заключается в том, чтобы установить ширину на то, что будет вмещать все столбцы, такие как 100, а затем в событии завершения создания установите ширину в соответствии с тем, что вы действительно хотите, например, percentWidth = 100 – robmcm

1

Я сделал то же самое в AdvancedDataGrid, и он работает. Попробуйте, установив эти значения

horizontalScrollPolicy="on" 
    width="100% 

, а затем добавить столбцы вам это должно работать с HDividedBox.

1

Вы можете выполнить это, это то, что я считаю ошибкой в ​​самом DataGrid.

Если вы установили minWidth = "0" и horizontalScrollPolicy = "{ScrollPolicy.AUTO}" в DataGrid, вы можете затем создать объекты DataGridColumn с фиксированной шириной и выполнить их правильно.

Однако, по-прежнему возникает проблема с последним столбцом, когда DataGrid по-прежнему больше, чем сумма фиксированной ширины, он растянет окончательный вывод DataGridColumn.

Вы можете обойти эту проблему, добавив пустой столбец в конце без текста заголовка и т.д.

1

Ok - мы запускаем в этом себя при построении поддержки различных режимов ширины колонки. Просто немного пикантная информации - если вы хотите установить ширину явно, убедитесь, что вы делаете что-то вроде этого:

var oldPolicy:String = grid.horizontalScrollPolicy; 
grid.horizontalScrollPolicy ="on" 
//set your widths here 
grid.horizontalScrollPolicy =oldPolicy;