Flex 高级数据网格

发布于 2024-11-16 16:57:42 字数 654 浏览 3 评论 0原文

我的 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(),但无济于事。

I have an AdvancedDatagrid in my Flex application.

<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>

I dynamically assign columns and grouping and summaries to groupedData GroupingCollection2.
When I filter the datasource and call groupedData.refresh() the grid refreshes fine. But when I load data, and apply no grouping (add no groupings to the GroupingCollection2), the groupedData.Refresh() does not update the grid to show only the filtered in rows. I have also tried calling the grid's own InvalidateList(), to no avail.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一人独醉 2024-11-23 16:57:42

谢谢你的建议。

我查看了 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 上显示的唯一方法(据我所知)

因此,我认为解决方法是始终至少有 1 个分组
AdvancedDataGrid上。不过,有点不受欢迎的限制。

Thanks for the suggestion.

I looked inside the 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;
        }

So for some reason Adobe does reset the dataSource if there is no grouping
on, which (in my opinion) is a bug, or a bad assumption.

The code above gets called when calling the groupingCollection.refresh(),
which is the only way of refreshing the display on the AdvancedDataGrid (that I am aware of)

So, I presume a workaround would be to always have at least 1 grouping
on the AdvancedDataGrid. A bit of an undesirable restriction, though.

故事↓在人 2024-11-23 16:57:42

我猜测发生这种情况是因为加载数据时应用于旧 ArrayCollection 的 filterFunction 被清除。我要做的是复制旧的 ArrayCollection 的 filterFunction (以及 Sort 如果需要的话),然后在加载数据后重新分配这些属性。

这是一个快速(且未经测试)的示例:

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

My guess is this is happening because the filterFunction that was being applied to the old ArrayCollection is getting wiped out when the data gets loaded. What I would do is make a copy of the old ArrayCollection's filterFunction (and Sort if needed) and then reassign those properties once the data has been loaded.

Here's a quick (and untested) example:

public function loadData(myData:ArrayCollection):void
{
  var filter:Function = reportData.filterFunction;
  reportData = myData;
  reportData.filterFunction = filter;
  reportData.refresh();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文