AdvancedDataGrid + GrouppingCollection2 - 滚动到特定项目

时间:2013-11-19 14:04:17

标签: flex flex4

我的Adobe Flex存在问题。我有AdvancedDataGrid作为树视图,数据提供程序是GroupingCollection2。在这个网格中,我有文件,按3个标签分组。当用户修改任何文档时,我必须刷新整个网格。这是我的问题。刷新后,我的网格滚动到开头。我设法将它滚动到以前的索引,但它不能正常工作。如果折叠了编辑文档上方的任何节点,则在刷新之后,所有节点都会展开,并且之前的索引不会定位到同一文档。我怎么能记住所选项目并滚动到它?

我对这方面的困难主要是因为数据网格中的行数多于源中的项目。就像这样,因为网格中的所有“文件夹”也被计为行。

这是我的AdvancedDataGrid:

<mx:AdvancedDataGrid  visible="{entityId > 0}" height="100%" variableRowHeight="true" width="90%" left="5" right="5" bottom="5" top="70" id="_dg" doubleClickEnabled="false" doubleClick="onDgDoubleClick(event)"  updateComplete="onUpdateComplete(event)">
            <mx:dataProvider>
                <mx:GroupingCollection2 id="_groupper" source="{getTemplateFilesResponder.lastResult}">
                    <mx:grouping>
                        <mx:Grouping>
                            <mx:GroupingField name="Type1" groupingFunction="getTypeLabel" id="_groupingField"  />
                            <mx:GroupingField name="Type2" groupingFunction="getTypeLabel" />
                            <mx:GroupingField name="Type3" groupingFunction="getTypeLabel"/>
                        </mx:Grouping>
                    </mx:grouping>
                </mx:GroupingCollection2>
            </mx:dataProvider>    
            <mx:columns>        
                <mx:AdvancedDataGridColumn headerText="{resourceManager.getString('biawizard','file.18')}" dataField="OriginalFileName" wordWrap="true" />
                <mx:AdvancedDataGridColumn headerText="{resourceManager.getString('biawizard','list.labeldescription')}" dataField="Comments" wordWrap="true" />

                <mx:AdvancedDataGridColumn headerText="{resourceManager.getString('biawizard','filelistform.Version')}" dataField="Version" wordWrap="true" />
                <mx:AdvancedDataGridColumn headerText="{resourceManager.getString('biawizard','filelistform.Status')}" dataField="Status" labelFunction="getStatusLabel" wordWrap="true" />

            </mx:columns>
        </mx:AdvancedDataGrid>

有人知道我怎么能正确地做?

1 个答案:

答案 0 :(得分:1)

你可以尝试一个技巧,但正如你说的不正常,分配索引的问题。 您可以保存选择索引以了解哪个是最后选择的项目,然后在通过事件运行命令后分配它。

[Bindable] private var objLastSelectIndex:int;

private function init()
{
    FlexGlobals.topLevelApplication.addEventListener(Controller.EVENT_YOUR_EVENT_REFRESH, onScrollSett);
}

private function onItemClickDataGrid(e:Event):void 
{
    this.objLastSelectIndex = this.adgData.selectedIndex;
}

private function onScrollSett(e:Event):void
{
    try
    {
        this.adgData.selectedIndex = this.objLastSelectIndex
        this.adgData.validateNow();
        this.adgData.scrollToIndex(this.objLastSelectIndex);    
    }
    catch(err:Error)
    {
        //TODO: ERROR IN INDEX SETTING
    }

}


<mx:AdvancedDataGrid id="adgData" itemClick="{onClickItemDataGrid(event)}" />

此外,如果您使用ArrayCollection,您可以尝试使用它来源,直接指定值,不会重新绘制对网格的操作。

regars。