Визуализация сетки данных с динамическими столбцами в Flex - PullRequest
1 голос
/ 17 июля 2011

У меня есть сетка данных, которая отображает детали для продукта. Для определенного продукта мне нужно отобразить его текущий статус Id (Доступен / Нет) и к какой категории он принадлежит. Часть категории немного отличается от той, на которую она похожа.

Продукт A может принадлежать к категориям A, B и C, в то время как продукт B относится к A, c и D и так далее. Структура этой таблицы будет выглядеть примерно так:

enter image description here

Столбцы категорий извлекаются из базы данных и передаются в качестве параметра для динамического построения столбцов в Datagrid.

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

Product{
var productId:String;
var productName:String;
var status:String;
var categoryList:ArrayCollection;
}

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

Любые указатели о том, как получить эту сетку данных, будут очень полезны.

1 Ответ

2 голосов
/ 18 июля 2011

В общем случае, чтобы решить вашу проблему, вам нужно создать другую структуру данных:

Category{
 var id:Number;
 var name:String;
}

После этого вам нужно будет расширить DataGridColumn. Добавьте к этому свойство категории. Генерация столбцов будет выглядеть так:

for each(var category:Categoty in categories){
 var column:CategoryDataGridColumn = new CategoryDataGridColumn();
 column.category = category;
 column.itemRenderer = CategoryItemRenderer;
 datagrid.columns.push(column);
}

CategoryItemRenderer расширит базовый рендеринг элементов DataGrid. Будет примерно так:

override protected function commitProperties():void
{
 super.commitProperties();
 if(_dataChanged)
 {
  _dataChanged = false;
  text = getText();
 }
}

private function getText():String
{
 var result:String = “Not Belongs”
 var columnCategory:Category = CategoryDataGridColumn(listData.owner.columns[listData.columnIndex]).category;
 for each(var category:Category in Product(data).categoriesList)
 {
  if(columnCategory.id == category.id)
  {
   result = “Belongs”;
   break;
  }
 }
 return result;
}
...