Apache flex 如何使用AsyncListView作为AdvancedDataGrid的数据提供程序来显示分层数据?

Apache flex 如何使用AsyncListView作为AdvancedDataGrid的数据提供程序来显示分层数据?,apache-flex,Apache Flex,我想使用AsyncListView通过远程处理获取数据,并将其作为数据提供者提供给AdvancedDataGrid。我正在使用[blog]中的PagedList组件 AdvancedDataGrid未填充记录。我在简单的datagrid上做了测试,它工作得非常好 这里会有什么问题 代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

我想使用AsyncListView通过远程处理获取数据,并将其作为数据提供者提供给AdvancedDataGrid。我正在使用[blog]中的PagedList组件

AdvancedDataGrid未填充记录。我在简单的datagrid上做了测试,它工作得非常好

这里会有什么问题

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     xmlns:local="*"
     width="400" height="300">

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->

    <local:PagedList id="pagedList" pageSize="100" length="1000"  
                                             loadItemsFunction="loadItems"/>
    <s:AsyncListView id="asyncListView" list="{pagedList}" 
                          createPendingItemFunction="handleCreatePendingItemFunction"/>
    <s:RemoteObject id="ro" destination="helloService" 
                       endpoint="http://localhost:8080/SpringRemoting/messagebroker
                                 /amf"/>

</fx:Declarations>

<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.collections.Grouping;
        import mx.collections.GroupingCollection;
        import mx.collections.GroupingField;
        import mx.collections.IList;
        import mx.collections.errors.ItemPendingError;
        import mx.controls.Alert;
        import mx.controls.List;
        import mx.events.FlexEvent;
        import mx.rpc.AsyncResponder;
        import mx.rpc.AsyncToken;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        import mx.utils.ObjectUtil;


        private function handleCreatePendingItemFunction(index:int, ipe:ItemPendingError):Object {
            mx.controls.Alert.show("handleCreatePendingItemFunction index = " + index + " : " + ipe.message); 
            return {};
        }

        public function loadItems(list:IList, start:uint, count:uint):void
        {
            mx.controls.Alert.show("loadItems lenght : start = " + list.length + " : " + start);
            var asyncToken:AsyncToken = ro.getRecordsFromDB(start, count);
            asyncToken.addResponder(new AsyncResponder(onResult, onFault, start));

        }

        private function onResult(event:ResultEvent, token:Object):void {
            //1. Fetch data from database

            var items:Vector.<Object> = new Vector.<Object>();
            for each (var item:Object in event.result ) {
                items.push(item);
            }

            //2. Update pagedList
            pagedList.storeItemsAt(items, token as int);

            //3. Update GroupingCollection's source 
            asyncListView.list = pagedList;
            gc.source = asyncListView.list;
            gc.refresh();
            adg1.validateNow();
        }

        private function onFault(event:FaultEvent, token:Object):void {
            mx.controls.Alert.show("fault : " + event.fault.message);
        }

    ]]>
</fx:Script>


<mx:AdvancedDataGrid id = "adg1" 
                     initialize="gc.refresh();"
                     sortExpertMode="true"
                     defaultLeafIcon="{null}" 
                     folderClosedIcon="{null}"
                     folderOpenIcon="{null}"
                     height="200"
                     width="500"
                     displayItemsExpanded="false"
                     x="10">
    <mx:dataProvider>
        <mx:GroupingCollection2 id="gc" 
                                childrenField="col1"
                                >
            <mx:grouping>
                <mx:Grouping label="GroupLabel1">
                    <mx:GroupingField  name="col1"> </mx:GroupingField>
                    <mx:GroupingField  name="col2"> </mx:GroupingField>
                    <mx:GroupingField  name="col3"> </mx:GroupingField>
                    <mx:GroupingField  name="col4"> </mx:GroupingField>
                </mx:Grouping>  
            </mx:grouping>
        </mx:GroupingCollection2>
    </mx:dataProvider>
    <mx:columns>
        <mx:AdvancedDataGridColumn dataField="GroupLabel1" headerText="col1" />
        <mx:AdvancedDataGridColumn dataField="col2" />
        <mx:AdvancedDataGridColumn dataField="col3" />
        <mx:AdvancedDataGridColumn dataField="col4" />
        <mx:AdvancedDataGridColumn dataField="col5" />
    </mx:columns>
</mx:AdvancedDataGrid>


<mx:DataGrid dataProvider="{asyncListView}" x="10" y="300">
    <mx:columns>
        <mx:DataGridColumn dataField="col1"/>
        <mx:DataGridColumn dataField="col2"/>
        <mx:DataGridColumn dataField="col3"/>
        <mx:DataGridColumn dataField="col4"/>
        <mx:DataGridColumn dataField="col5"/>
        <mx:DataGridColumn dataField="col6"/>
    </mx:columns>
</mx:DataGrid>

=新向量。();
对于每个(变量项:event.result中的对象){
项目。推送(项目);
}
//2. 更新页面列表
pagedList.storeItemsAt(项目,标记为int);
//3. 更新GroupingCollection的源
asyncListView.list=pagedList;
gc.source=asyncListView.list;
gc.refresh();
adg1.validateNow();
}
私有函数onFault(事件:FaultEvent,标记:Object):void{
mx.controls.Alert.show(“fault:+event.fault.message”);
}
]]>

AsyncListView
不表示分层数据。我想您必须对它进行子类化,或者制作自己的版本,实现
IHierarchicalData
我正在使用GroupingCollection将平面数据表示为分层形式。问题是,当我使用pagedList组件(如上面的示例所示)时,它的工作方式与pagedList与DataGrid/List组件的工作方式不同(分页效果)。