2011-06-23 11 views
0

FlexアプリケーションにAdvancedDatagridがあります。Flex AdvancedDataGrid

<mx:AdvancedDataGrid id="reportGrid" creationComplete="groupedData.refresh()" width="100%" height="100%" variableRowHeight="true"> 
        <mx:dataProvider> 
         <mx:GroupingCollection2 id="groupedData" source="{reportData}"/> 
        </mx:dataProvider> 
       </mx:AdvancedDataGrid> 

私は、列とグループ化と要約をgroupedData GroupingCollection2に動的に割り当てます。 データソースをフィルタリングしてgroupedData.refresh()を呼び出すと、グリッドが正常に更新されます。しかし、データをロードし、グループ化を適用しない(GroupingCollection2にグループ化を追加しない)場合、groupedData.Refresh()はフィルタリングされた行のみを表示するようにグリッドを更新しません。私はグリッド自身のInvalidateList()を呼び出すことも無駄にしました。

+0

フィルタなどに使用するコードを表示します。 – JeffryHouser

答えて

0

ArrayCollectionに適用されていたfilterFunctionがデータが読み込まれると消去されるため、これが起こっていると思います。私が行うことは、古いArrayCollectionのfilterFunction(および必要であればSort)のコピーを作成し、データがロードされたらそれらのプロパティを再割り当てすることです。

は、ここでは簡単(および未テスト)の例です:提案のための

public function loadData(myData:ArrayCollection):void 
{ 
    var filter:Function = reportData.filterFunction; 
    reportData = myData; 
    reportData.filterFunction = filter; 
    reportData.refresh(); 
} 
1

感謝。

私はGroupingCollection2.asの内側に見えた:

// return if no grouping or groupingFields are supplied 
     if (!grouping || grouping.fields.length < 1) 
     { 
      super.source = source; 
      // dispatch collection change event of kind reset. 
      resetEvent = 
        new CollectionEvent(CollectionEvent.COLLECTION_CHANGE); 
      resetEvent.kind = CollectionEventKind.RESET; 
      dispatchEvent(resetEvent); 
      return true; 
     } 

だから、Adobeは(私の意見では)バグ、または悪い仮定である、には、グループ化 がない場合はデータソースをリセットしない何らかの理由。

AdvancedDataGrid上の表示を更新する唯一の方法であるコードgroupingCollection.refresh()を呼び出すときに上記呼び出され、 (私が知っていること)

だから、私はこの問題を回避するには、常にで持っていることであろうと推定しますAdvancedDataGridには少なくとも1つのグループ化 があります。しかし、少しの望ましくない制限。

関連する問題