Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex DataGrid阻止自动应用筛选器_Apache Flex_Datagrid_Filter - Fatal编程技术网

Apache flex Flex DataGrid阻止自动应用筛选器

Apache flex Flex DataGrid阻止自动应用筛选器,apache-flex,datagrid,filter,Apache Flex,Datagrid,Filter,为了定位问题,我正在使用一个翻译实用程序,该实用程序具有3列数据网格:翻译代码、参考文本和目标文本 DataGrid的dataProvider属性绑定到ArrayCollection实例。用户可以编辑网格,成功编辑后,使用setItemAt()方法更新基础集合。该集合还具有过滤功能,使查找某些文本更容易 当用户单击“应用过滤器”按钮时,过滤器功能将更新。这很有效。我遇到的问题是,只要基础集合项以不符合筛选器的方式更改,行就会被隐藏。该行会立即隐藏,这对用户不是很友好。仅当按下“应用过滤器”按钮时

为了定位问题,我正在使用一个翻译实用程序,该实用程序具有3列数据网格:翻译代码、参考文本和目标文本

DataGrid的dataProvider属性绑定到ArrayCollection实例。用户可以编辑网格,成功编辑后,使用setItemAt()方法更新基础集合。该集合还具有过滤功能,使查找某些文本更容易

当用户单击“应用过滤器”按钮时,过滤器功能将更新。这很有效。我遇到的问题是,只要基础集合项以不符合筛选器的方式更改,行就会被隐藏。该行会立即隐藏,这对用户不是很友好。仅当按下“应用过滤器”按钮时,行才应隐藏(或显示)


我正在寻找一种方法来实现这一点。

我想您的意思是DataGrid的数据提供程序绑定到ArrayCollection实例

无论如何,如果您想过滤DataGrid的dataProvider,那么这将从DataGrid中删除行。您可以删除筛选器以将其添加回。概念上是这样的:

collection.filterFunction = null;
collection.refresh();
component1.dataProvider = ListCollectionView(mySource);
component1.dataProvider = ListCollectionView(mySource);
如果将dataProvider用作多个组件的源,则可以通过对每个组件使用不同的ListCollectionView(但使用相同的源)来保持过滤分离。大概是这样的:

collection.filterFunction = null;
collection.refresh();
component1.dataProvider = ListCollectionView(mySource);
component1.dataProvider = ListCollectionView(mySource);
现在,对一个数据提供程序应用筛选器不会影响另一个数据提供程序。

如果这样做没有帮助,您将需要详细说明您遇到的问题,并可能提供示例代码。

在询问并环顾四周后,我确定没有真正的方法可以做到这一点。不过,我确实解决了我的问题,我自己做了过滤,只保留了一个“主键”列表。然后,我使用该列表筛选集合


结果是,记录更改时,行不会突然消失,这正是我想要的。

在同一个源上使用不同的视图并不能解决我的问题,因为我只使用一个视图,但感谢您的建议!问题是更新源(collection.setItemAt)也会导致视图重新应用过滤器。我想知道是否有办法防止这种情况发生。我不知道。这似乎是意料之中的行为。您必须扩展组件以防止这种情况发生;如果可能的话,我希望找到一种方法,只在显式调用refresh()时应用过滤器。我想那是不会发生的:s