AdvancedDataGrid + GrouppingCollection2 - 滚动到特定的项目

3
我有一个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个回答

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,可以尝试直接分配其源值,这样对网格的更改不会被重新绘制。
问候。

我之前尝试过这样做,但是正如我所写的那样,它并没有正常工作。当我在刷新后折叠节点时,它们会展开,保存的索引不正确。如果我想这样做,索引应该是这样的:保存的索引+编辑文档上方折叠节点中文档数量。 - Paweł Reszka
如果我理解正确,您已经多次遇到了同样的问题,所以我避免使用这些控件,而是使用两个网格来避免这个问题。正如你所说,生成正确的索引几乎是不可能的。尝试直接使用“源”了吗? - matilu
这是我第一次遇到这个问题,在发布我的问题之前,我刚刚在处理它。我试图使用源代码,但它不包含节点,只有文档,所以索引仍然混乱。 - Paweł Reszka
只要想一想你所做的工作,就能确保你不必总是工作。也许你需要看看其他展示选项,不要被困在这里。 我希望有人能够帮忙。如果我找到了什么,我会分享的。 - matilu
谢谢。我希望我能做到 ;) - Paweł Reszka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接