Изменить размер DataGrid, когда показано - PullRequest
2 голосов
/ 19 мая 2011

Я пытаюсь написать свое гибкое приложение, чтобы оно восстанавливало настройки пользователя при запуске.Приложение имеет 3 сетки данных (только одна видна [на экране] в любое время), и я просто сохраняю состояние сеток, если пользователь когда-либо делает какие-либо события изменения размера.

Сохранение состояния работает отлично,проблема приходит при восстановлении.Кажется, что только видимая сетка данных восстанавливается правильно.На всех других сетках все ширины неверны и не соответствуют параметрам, которые я восстановил.

Проблема в том, что при запуске приложения сетки данных имеют неправильный размер.Каждая сетка данных занимает весь экран, но изначально им присваивается очень маленький размер (т. Е. Ширина 200)

Существует ли какой-либо способ принудительно изменить размер сетки данных при ее создании?Или же можно узнать, когда сетка данных «развернута», я не хочу подключаться к событию изменения размера - если это возможно - потому что я получаю это довольно часто, и я хочу восстановить настройки только один раз.

Вот код, который я использую для восстановления ширины столбцов:

var grid:DataGrid = ...;

... for each column ...
... parse width into width (ie. width is now "320")
// If it's in the config, it's visible
col.visible = true;
col.width = width;

... After loop ...
grid.invalidateSize();
grid.invalidateDisplayList();

Редактировать:

Вот информация, которую вы, ребята, запросили:

  • Настройки сохраняются в базе данных (проект flex подключен к JBoss).Я просто сохраняю объект типа CSV с именем столбца и его шириной.Я знаю, что это работает, потому что одна сетка данных, которая видна при запуске приложения, имеет правильный размер.

  • Да, сетки используют относительные размеры (т. Е. 100%) - я могу 'это действительно изменить, потому что я хочу, чтобы сетка занимала все доступное пространство в своем контейнере - и я хочу, чтобы пользователь мог изменить размер своего браузера и при этом выглядел правильно.

  • Каждая сетка содержится в своем собственном Hbox

  • Сетки данных создаются при запуске приложения - вы можете видеть только одну из них.Они относятся к типу навигатора вкладок, но его политика создания установлена ​​на «все», поэтому они могут быть заполнены данными (заполнение занимает некоторое время, и обычно пользователь некоторое время сидит на передней сетке.)

  • Я не могу поместить свои элементы изменения размера в обработчик creationComplete, потому что у меня возникает та же проблема.Размер сетки составляет около 50 сразу после ее создания (он должен быть около 1000, 100% ширины страницы), а затем я устанавливаю размеры столбцов (которые, очевидно,> 50), а изменение размера ничего не делает

Ответы [ 2 ]

1 голос
/ 24 июля 2011

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

// saves column width - this is intended to save width percent which
// will only be available on initialization, after that I beleive widths
// will be fixed size
private function saveOffColumnWidths(columns:ArrayCollection):void
{
    for each(var column:TDMSEDataGridColumn in columns)
    {
    originalColWidths.push(column.width);       
    }
}

// resets the column widths - the saved widths are assumed to be width percentages
private function resetColumnWidths():void
{
    dataGrid.columns[0].width=20; // set the check col seperately
    for (var pos:int=0; pos<dataGrid.columnCount-1;pos++ )
    {
    dataGrid.columns[pos+1].width = (dataGrid.width - 20) * originalColWidths[pos];
    }
} 

protected function dataGrid_renderHandler(event:Event):void
{
    resetColumnWidths();
}
1 голос
/ 19 мая 2011

Пара мыслей:

  • Изменение размера во время CreationComplete () : Когда создаются ваши сетки данных? Можете ли вы объявить метод наподобие resizeDataGrid (), когда для решетки данных запускается событие creationComplete()? Если вы используете сетки данных, скажем, в TabNavigator, политика создания по умолчанию заключается в том, чтобы отложить создание компонента до тех пор, пока пользователь не использует компонент (например, не сделает вкладку активной).
  • Фиксированные размеры : Используют ли ваши сетки данных фиксированный размер или относительный размер? Относительное изменение размера (например, ширина = '50%') столбцов сетки данных или сетки данных содержит ошибки во Flex, и наилучшим обходным решением является установка ширины в пикселях как для сетки данных, так и для столбцов сетки данных
  • Сохранение пользовательских настроек : Как вы храните свои пользовательские настройки? Использование SharedObject для хранения ширины сетки данных, вероятно, является наилучшим вариантом.
  • Контейнеры искр : Как содержатся сетки данных? Например, каждый из них находится в VGroup или не содержится вообще? Я обнаружил, что использование инструментов разметки Spark (например, VGroup) для хранения ваших таблиц данных улучшает проблемы с разметкой сетки данных.
...