Flex 4 - фильтрация XMLListCollection в AdvancedDataGrid
У меня есть advancedDataGrid, который заполняется данными XMLListCollection. Я пытаюсь отфильтровать эту коллекцию XMLListCollection, но она не отражается в ADG. Все мои тесты показывают, что он фильтрует данные. Может кто-нибудь протянуть руку??
//
private function isStory_changeHandler(event:Event):void {
if (event.currentTarget.selected) {
myXMLList.filterFunction = filterArray;
trace("filter");
} else {
myXMLList.filterFunction = null;
trace("don't filter");
}
trace(myXMLList.length);
myXMLList.refresh();
}
private function filterArray(item:XML):Boolean {
var isMatch:Boolean = false;
if (item.@isStory == "True") {
isMatch = true;
}
return isMatch;
}
//
<mx:AdvancedDataGrid id="mainADG" width="100%" height="100%" dataProvider="{new HierarchicalData(myXMLList)}"
draggableColumns="false"
itemClick="mainADG_itemClickHandler(event)"
doubleClickEnabled="true" itemDoubleClick="mainADG_itemDoubleClickHandler(event)"
horizontalGridLines="true" horizontalGridLineColor="#666666"
defaultLeafIcon="{null}" folderClosedIcon="{null}" folderOpenIcon="{null}"
disclosureClosedIcon="{plus}" disclosureOpenIcon="{minus}"
variableRowHeight="true" wordWrap="true"
>
<mx:groupedColumns>
<mx:AdvancedDataGridColumn headerText="Document title" dataField="@title" fontWeight="bold"/>
<mx:AdvancedDataGridColumn headerText="Story title" dataField="@isStory" fontWeight="bold"/>
<mx:AdvancedDataGridColumn headerText="Author" dataField="@author" fontWeight="bold"/>
<mx:AdvancedDataGridColumn headerText="Publication date" dataField="@pubDate" fontWeight="bold"/>
<mx:AdvancedDataGridColumnGroup headerText="Tags" sortable="false" >
<mx:AdvancedDataGridColumn headerText="Name" dataField="@name" sortable="false"/>
<mx:AdvancedDataGridColumn headerText="Type" dataField="@type" sortable="false"/>
</mx:AdvancedDataGridColumnGroup>
</mx:groupedColumns>
</mx:AdvancedDataGrid>
1 ответ
Решение
Проблема в том, что вы фильтруете myXMLList; но dataProvider - это новая переменная, основанная на myXMLList. Итак, у вас есть два независимых экземпляра одних и тех же данных, и вы фильтруете неправильный.
Это может быть одним из решений:
private function isStory_changeHandler(event:Event):void {
if (event.currentTarget.selected) {
mainADG.dataProvider.filterFunction = filterArray;
trace("filter");
} else {
mainADG.dataProvider.filterFunction = null;
trace("don't filter");
}
trace(mainADG.dataProvider.length);
mainADG.dataProvider.refresh();
}