2011-01-04 24 views
1

Um Dinge, die ich arbeite, an einem Übersetzungsprogramm mit einem Datagrid zu arbeiten, das 3 Spalten hat: Übersetzungscode, Referenztext und Zieltext.Flex DataGrid verhindert, dass ein Filter automatisch angewendet wird

Die DataProvider-Eigenschaft des DataGrid ist an eine ArrayCollection-Instanz gebunden. Der Benutzer kann das Raster bearbeiten und bei einer erfolgreichen Bearbeitung wird die zugrunde liegende Sammlung mithilfe der Methode setItemAt() aktualisiert. Die Sammlung verfügt auch über eine Filterfunktion, um das Auffinden bestimmter Texte zu erleichtern.

Wenn der Benutzer auf die Schaltfläche "Filter anwenden" klickt, wird die Filterfunktion aktualisiert. Das funktioniert gut. Das Problem, das ich habe, ist, dass Zeilen ausgeblendet werden, sobald sich das zugrunde liegende Sammlungselement auf eine Weise ändert, die nicht mit dem Filter übereinstimmt. Die Zeile ist sofort ausgeblendet, was nicht sehr benutzerfreundlich ist. Zeilen sollten nur ausblenden (oder angezeigt werden), wenn die Schaltfläche "Filter anwenden" gedrückt wird.

Ich bin auf der Suche nach einer Möglichkeit, dies zu erreichen.

Antwort

0

Nachdem ich gefragt und mich umgesehen habe, stelle ich fest, dass es keinen wirklichen Weg gibt, dies zu tun. Ich habe mein Problem jedoch gelöst, indem ich selbst filterte und nur eine Liste von 'Primärschlüsseln' führte. Ich benutze diese Liste dann, um die Sammlung zu filtern.

Das Ergebnis ist, dass Zeilen nicht plötzlich verschwinden können, wenn Datensätze geändert werden, was ich wollte.

0

Ich nehme an, Sie meinen, dass der DataGrid DataProvider an eine ArrayCollection-Instanz gebunden ist?

Wie auch immer, wenn Sie den DataProvider des DataGrid filtern möchten, dann entfernt das Zeilen aus dem DataGrid. Sie können den Filter entfernen, um sie hinzuzufügen zurück in etwas, konzeptionell wie folgt aus:.

collection.filterFunction = null; 
collection.refresh(); 

Wenn Sie den Datenprovider als Quelle für mehrere Komponenten verwenden, können Sie die Filterung getrennt halten, indem sie einen anderen Listcollectionview für jede Verwendung ein, aber mit der gleichen Quelle. So etwas wie das:

component1.dataProvider = ListCollectionView(mySource); 
component1.dataProvider = ListCollectionView(mySource); 

Die Anwendung eines Filters auf einen DataProvider wirkt sich nicht auf den anderen aus.
Wenn dies nicht hilft, müssen Sie das Problem, das Sie haben, erweitern und Beispielcode bereitstellen.

+0

Verschiedene Ansichten auf der gleichen Quelle lösen nicht mein Problem, weil ich nur eine Ansicht verwende, aber danke für den Vorschlag! Das Problem besteht darin, dass das Aktualisieren der Quelle (collection.setItemAt) auch dazu führt, dass die Ansicht den Filter erneut anwendet. Ich habe mich gefragt, ob es einen Weg gibt, das zu verhindern. – xastor

+0

Nicht, dass ich davon weiß. Es scheint, als wäre das Verhalten zu erwarten. Sie müssen die Komponente erweitern, um dies zu verhindern. wenn möglich. – JeffryHouser

+0

Ich hoffte auf einen Weg, den Filter nur anzuwenden, wenn refresh() explizit aufgerufen wird. Ich schätze, das wird nicht passieren – xastor

Verwandte Themen