Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-05-2011, 16:19   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Seltsames Verhalten bei DataGrid (Checkbox)

Hallo zusammen.

Ich ärger mich jetzt schon zwei Stunden mit dem doofen ItemRenderer meines DataGrids herrum. Ich schaffe es einfach nicht, dass die CheckBox den Wert des Eintrags an nimmt.

Vielleicht liegt es daran, dass der Wert (true oder false) als Text aus der Datenbank kommt. Bei Tests, in denen ich die Werte aus einem in Flex erzeugten Array verwende klappt es.

Alle anderen Renderer (Combo-Boxen, NumericStepper) funktionieren in dem DataGrid einwandfrei.

Evtl. liegt es auch daran, dass ich die Columns erst instanziere und nicht von vornherein festgelegt habe?!

Anbei mein Code wie ich den ItemRenderer zuweisen möchte.
PHP-Code:
if (importXML[0].children()[i].art == "Check-Box") {    // wenn es sich um eine Check-Box handelt
        // spaltenNamen entspricht einem Array mit DataGridColumns
                        
        /*
         * // Standard
        spaltenNamen[i].itemRenderer = new ClassFactory(CheckBox);
        spaltenNamen[i].rendererIsEditor = true;
        spaltenNamen[i].editorDataField = "selected";
        */
                        
        /*
         * // Werte werden richtig als true/false dargestellt und auch korrekt geändert
        spaltenNamen[i].itemEditor = new ClassFactory(CheckBox);
        spaltenNamen[i].editorDataField = "selected";
        */
                        
        
var CBRenderer:ClassFactory = new ClassFactory(CheckBox);
        
CBRenderer.properties = { data:spaltenNamen[i].dataField as Boolean };
        
spaltenNamen[i].itemRenderer CBRenderer;
        
spaltenNamen[i].rendererIsEditor true;
        
spaltenNamen[i].editorDataField "selected";

Die Werte scheinen korrekt in den Zellen zu stehen und werden nach dem Editieren auch korrekt dargestellt / gespeichert

Wenn es daran liegt, dass die Werte als Text und nicht als "richtige" Booleans übergeben werden müsste ich im Nachhinein für jeden Eintrag nochmal den Text in ein Boolean umwandeln?!

Weiß wer was ich falsch mache?

MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6
dr monk ist offline   Mit Zitat antworten
Alt 23-05-2011, 16:49   #2 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.499
Die Vermutung mit dem String liegt nahe. Ich weiß ja nicht was du, wie verwendest, aber wenn es daran liegt, würde ich dir empfehlen int statt Boolean zu verschicken. Da lässt sich dann recht simpel mit arbeiten, auch wenn es wegen der Übermittlung zunächst ein String ist (bspw. wie bei einer xml).

PHP-Code:
//taugt nix:
trace(Boolean("false") == true)//true
trace(Boolean("true") == true)//true

//simpel
trace(Boolean(int("0")) == true)//false
trace(Boolean(int("1")) == true)//true

//-> (wirft ne Warnung, kannst es aber auch noch mal in Boolean packen)
cbUnChecked.selected int("0");
cbChecked.selected   int("1"); 
mfg

sx
shin10 ist offline   Mit Zitat antworten
Alt 23-05-2011, 17:07   #3 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
XML ist nicht Bindable. Arrays auch nicht. Man nimmt IList Implementierungen, sonst stellt man sich immer wieder ein Bein, wie man sieht.

Reicht deine Konfiguration laut Doku so aus?
Omega Psi ist offline   Mit Zitat antworten
Alt 23-05-2011, 17:10   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Danke für die Antwort.
Daran habe ich auch gedacht. Ich müsste dann allerdings noch prüfen ob ich die Werte auch wieder als int zurück schicken kann.

Werde ich morgen mal testen. Heute habe ich dafür keine Nerven mehr

@ Omgea Psi:
mit IList Implementierungen habe ich mich bisher noch nicht beschäftigt. Werde es aber mal nachlesen.
Wieso sind Arrays denn nicht Bindable? Wenn ich ein Array als DataProvider angebe und im DataGrid was ändere ist es doch auch in meinem Array geändert?!

Zitat:
Reicht deine Konfiguration laut Doku so aus?
Ich weiß nicht genau was du meinst. Aber wenn mein Problem daran liegt, dass ein String statt ein Boolean übergeben wird funktionieren meine ItemRenderer.
Mit NumericSteppern und ComboBoxen habe ich, wie im Anfangspost geschrieben, keine Probleme.


MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6

Geändert von dr monk (23-05-2011 um 17:16 Uhr)
dr monk ist offline   Mit Zitat antworten
Alt 23-05-2011, 17:14   #5 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.499
Zitat:
Zitat von Omega Psi Beitrag anzeigen
XML ist nicht Bindable. Arrays auch nicht. Man nimmt IList Implementierungen, sonst stellt man sich immer wieder ein Bein, wie man sieht.

Reicht deine Konfiguration laut Doku so aus?
oops - flex
shin10 ist offline   Mit Zitat antworten
Alt 23-05-2011, 18:25   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Arrays, XML, Object, XMLList etc Instanzen sind nicht Bindable, da Sie keine PropertyChange-/Events dispatchen, wen sich ihr Zustand ändert. Natürlich kann man Referenzen auf Instanzen dieser Klassen als Bindable deklarieren, aber das istbei weiterm nicht das gleiche.

Und wenn du dir noch IList Implementierung angeschaut hast, dann weiß ich nicht, wie du Daten in Flex händelst?!
Omega Psi ist offline   Mit Zitat antworten
Alt 23-05-2011, 18:26   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Trotzdem kann die Vermutng meines Kollegen auch zutreffen.
Omega Psi ist offline   Mit Zitat antworten
Alt 23-05-2011, 19:27   #8 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Ich glaube ich befinde mich immernoch auf einem sehr niedriegen Level was Programmieren betrifft. Aber ich lerne gerne dazu.

Bisher arbeite ich mit meinen DataGrids immer so wie in folgendem Beispiel und hatte eigenltich noch keine Probleme damit:

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="appStart()">
    <mx:Script>
        <![CDATA[
        import flash.events.MouseEvent;
        import mx.collections.ArrayCollection;
        import mx.controls.Button;
        import mx.controls.DataGrid;
        
        private var meinArray:ArrayCollection = new ArrayCollection ([{ vorname:"Bob", nachname:"Bieber"} , {vorname:"Heinz", nachname:"Hamster" }]) ;
        private var meinDG:DataGrid;
        
        private function appStart():void {
            meinDG = new DataGrid();
            meinDG.editable = true;
            
            meinDG.dataProvider = meinArray;
            
            addChild(meinDG);
            
            var meinButton:Button = new Button();
            meinButton.label = "Daten ausgeben";
            meinButton.addEventListener(MouseEvent.CLICK, datenAusgeben);
            
            addChild(meinButton);
        }
        
        private function datenAusgeben(e:MouseEvent):void {
            for (var i:int = 0; i < meinArray.length; i++) {    // gibt mir die aktuellen Vor/Nachnamen aus
                trace("Nachname: "+meinArray[i].nachname+"  Vorname: "+meinArray[i].vorname);
            }
            
        }
        
        ]]>
    </mx:Script>
    
    
</mx:Application>
Wahrscheinlich gibt es dutzende Anwendungsfälle die dagegen sprechen würden. Aber ich bin noch nicht bis dahin gekommen.
Falls es doch mal der Fall sein sollte weiß ich ja wo ich fachkundige Hilfe finde

MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6
dr monk ist offline   Mit Zitat antworten
Alt 24-05-2011, 07:36   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
  1. Eine ArrayCollection ist eine IList Implementierung. Die richtige Benennung der Klassen, die du nutzt überlasse ich dir.
  2. Man nimmt keine {}/Object Instanzen oder XML, weil die keine PropertyChangeEvents dispatchen. Dafür schreibt man Klassen, die mindestens als [Bindable] annotiert sind.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
seltsames verhalten von UIScrollBar genesys ActionScript 3 2 26-04-2010 09:05
Seltsames Textfeld verhalten Samuel Flash Einsteiger 1 30-08-2007 22:23
Seltsames Verhalten.. robertosh ActionScript 1 1 13-12-2005 17:04
seltsames Key-Verhalten thomiko Flash MX 2004 0 30-03-2005 19:29
seltsames Verhalten Rudi Ratlos ActionScript 1 4 12-12-2001 14:31


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele