Der Zugriff auf eine in einem DataGrid ItemRenderer
Ich habe ein Datenblatt, ein checkbox-Element-renderer in einer cloumn zu ermöglichen, Zeile Auswahl:
Hauptanwendung:
<mx:DataGrid id="dg">
<mx:columns>
<mx:DataGridColumn id="ir" itemRenderer="renderers.RowCheckbox" />
<mx:DataGridColumn dataField="Name" headerText="Name" />
</mx:columns>
</mx:DataGrid>
Elementrenderer:
<-- RowCheckbox -->
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center">
<mx:CheckBox id="chk"/>
</mx:HBox>
Wie bekomme ich ein handle auf das Element-renderer /- checkbox, so dass ich bestimmen kann, welche Zeilen markiert?
InformationsquelleAutor mmattax | 2009-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur ein Wort der Beratung: Wir hatten ein ähnliches problem in unserer Anwendung, und wir lösten es, indem Sie eine "ausgewählte" - Eigenschaft, um die Elemente, die in der Eigenschaft dataprovider der datagrid-Komponente. Die selected-Eigenschaft der checkBox dann an die ausgewählte Eigenschaft unserer Einheit. Zu wissen, welche ausgewählt wurden, wir nur geloopt über die Entitäten in der dataprovider-Komponente anstelle der Elementrenderer. Nach vielen verschiedenen Ansätzen, dies war wirklich die beste option.
Wenn ich mich richtig erinnere, war das problem, dass die itemrenderers nicht erinnern, die den ausgewählten Zustand richtig und das datagrid war völlig Durcheinander, wenn Sie die Bildlauf nach oben und unten. Die falschen Zeilen ausgewählt wurden, die nach dem scrollen.
Eine andere Möglichkeit wäre die Versendung einer Veranstaltung in der Elementrenderer, die Blasen den ganzen Weg, um das datagrid-Steuerelement zu hosten. Sie können dann auf diese Ereignisse überwachen und aktualisieren Sie Ihr Modell, um die änderungen widerzuspiegeln.
Wir haben verwendet, dass der Ansatz gut und ich würde Zustimmen, dass es wahrscheinlich das einfachste.
Dies ist wahrscheinlich die einfachste und eleganteste Lösung ( wie ist Es vollständig kompatibel mit OOP Kapselung Regeln) haben wir kam mit.
Dies ist ein guter Weg, um darüber zu gehen, wenn Sie nichts dagegen haben, dass andere Mist in Ihre Daten. Wenn Sie wollen es auf die harte Weise können Sie die visibleData-Eigenschaft auf dem DataGrid zu analysieren, welche Zeilen ausgewählt werden sollten, aus dem aktuell sichtbaren Zeilen. Dann, wenn das datagrid-Steuerelement ein Bildlauf durchgeführt wird, neu zu bewerten, welche Zeilen ausgewählt werden sollte.
Die itemRenderers muss sich ändern, basierend auf den Daten, wie Sie gegeben werden, zu zeigen. Dies ist, weil ItemRenderers recycelt werden. Wenn Sie die Daten ändern, was auf dem Bildschirm ist der 4. ItemRenderer, Sie könnte tatsächlich sein, dass änderungen an der 11, statt. In anderen Worten, Sie sollten nicht ändern Sie die Werte der ItemRenderer extern. Sie müssen jede ItemRenderer auf Veränderungen reagieren, indem Sie sich. adobe.com/devnet/flex/articles/itemrenderers_pt1.html
InformationsquelleAutor Christophe Herreman
Ich lief in ähnliche Probleme mit dem DataGrid-und multiple-item-Renderer und die Wiederverwendung von Elementrenderern beim scrollen. Um Zugriff auf DataGrid-Elementrenderern erweiterte ich die DataGrid-Komponente. Mein Erster Gedanke war, mit indicesToIndex (), gefolgt von indexToItemRenderer(). Leider sind diese Methoden nicht, was ich erwartet habe, so habe ich den indicesToItemRenderer () - Methode:
Paket com.was auch immer.Kontrollen
{
Zur Behebung der Elementrenderer wiederverwendet, wenn scrolling-Problem, Lesen Sie bitte diesen Artikel:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html
Läuft es auf das überschreiben der Daten-setter und die Speicherung von Eigenschaften in den Daten. Zum Beispiel hatte ich eine Spalte mit einem Kontrollkästchen itemRenderer und eine weitere Spalte mit ComboBox. Für beide habe ich einen Listener für das change-Ereignis und speichern Sie ausgewählte, selectedIndex, etc in Daten, wenn Sie Eigenschaften ändern und überschreiben Sie die data-Set-diese Eigenschaften festlegen:
InformationsquelleAutor
Können Sie die
indexToItemRenderer()
- Methode ausgesetzt, die von allen Unterklassen von ListBase.Beispiel:
... wo
index
ist der index der DataGrid-Element, dessen "chk" - Eigenschaft, die Sie wollen testen.Guter Punkt, ja. Christophe Antwort ist eigentlich besser; ich habe den obigen Ansatz auf einzelne Spalten, non-scrolling-Listen und hatte gute Ergebnisse, aber was Sie wirklich suchen ist weder eine Eigenschaft der zugrunde liegenden Daten sowie die Sichtbarkeit von Objekten, sondern eher etwas in der Mitte.
Sie ändern könnte, über Ihre Funktion zu überprüfen, wird die Zeile und Spalte des benutzerdefinierten Renderer... someFunction(Zeile:int,Zelle:int):void
InformationsquelleAutor Christian Nunciato
In der ItemRenderer, versuchen Sie, Checkbox-Komponente in eine VBox..behebt das scrolling-Problem.
InformationsquelleAutor himanshu