2011-07-17 9 views
1

商品の詳細を表示するデータグリッドがあります。特定の製品については、Idの現在のステータス(Available/Not)と、それが属するカテゴリを表示する必要があります。カテゴリの部分は、それがそうであるように思われるものとは少し異なります。Flexの動的列でデータグリッドをレンダリングする

製品AはカテゴリA、B、Cに属し、製品BはA、C、Dなどに属します。このテーブルの構造は

enter image description here

ようなカテゴリの列になり、データベースから取得し、データグリッドで動的に列を構築するためのパラメータとして渡されます。

これを処理するために、私は以下のDatastructureをUIで定義しました。

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

これが私の問題を解決できるかどうかはわかりません。 カテゴリ名を含むマップが必要で、その製品に該当するかどうかを確認する必要があります。

このデータグリッドをレンダリングする方法についてのあらゆる指針は非常に役に立ちます。一般的なケースでは

答えて

2

はあなたの問題を解決するために、あなたはつもり別のデータ構造を作成する必要があります:あなたはのDataGridColumnを拡張する必要があります。その後

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

を。 「カテゴリ」プロパティを追加します。 の生成列は次のようになります。

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

CategoryItemRendererは、基本的なデータグリッドのアイテムレンダラーを拡張します。

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; 
} 
+0

ありがとうございました。私はこのようなことができました:) – Arun

関連する問題