2011-06-23 70 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

我的猜测是发生这种情况,因为应用于旧版ArrayCollectionfilterFunction在数据加载时已被清除。我要做的是复制旧的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不会重置数据源,如果有上,这(在我看来)是一个错误,或者坏的假设没有分组 。

代码调用groupingCollection.refresh(), 这是

所以,我相信一个解决方法刷新上AdvancedDataGrid显示(即我所知道的)的唯一办法是在上面被调用,以始终保持有AdvancedDataGrid上至少有1个分组 。不过,有一点不受欢迎的限制。