Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-02-2011, 14:16   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
dynamisches Datagrid?

Hi,

ich sitze gerade an einem Datagrid, welches ich gerne zu "100%" dynamisch befüllen will...


Jetzt hänge ich daran, dass einige Spalten einen Itemrenderer (bsp. eine Checkbox) haben sollen.

Wie kann ich das per As3 lösen? Mit MXML ist es kein Problem, nur im mit As3 habe ich irgendwie Probleme, was wie wo gelöst sein muss....

(Das Problem bezieht sich auf die Halo-Datagrid)
Btw. Hat schon mal jemand die Spark Datagrid Komponent benutzt? (Hero)

lg, nico
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 05-02-2011, 18:03   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Ich weiss nicht so ganz, was du meinst? Den Itemrenderer kann man doch recht einfach über die Column setzen?
Omega Psi ist offline   Mit Zitat antworten
Alt 06-02-2011, 13:06   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Ja, scheitere gerade einfach nur an der Syntax glaube ich....


ActionScript:
  1. var testArray:Array = [];
  2.                 for( var i:int = 0; i<4; i++)
  3.                 {
  4.                     var col:DataGridColumn = new DataGridColumn();
  5.                     col.headerText = headerLabelArray[i];
  6.                    
  7.                    
  8.                     col.dataField = dataFieldArray[i];
  9.                                        
  10.                     testArray.push(col);
  11.                 }
  12.                    
  13.                 myDatagrid.columns = testArray;
  14.             }

Das habe ich testweise zusammen gezimmert. Jetzt müsste ich doch eigentlich nur col.itemrenderer = XY setzen oder? Nur wie genau? Wenn ich ne MXML-Itemrenderer Komp erstelle geht das doch nur mit Spark, oder nicht?

Aber so richtig will das nicht klappen. Ich glaube ich steh da vor'm Berg...
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 06-02-2011, 13:32   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Ein ItemRenderer ist eine Klasse die IFactory implementiert laut Schnittstelle. Ist das nicht gegeben, kann man eine ClassFactory nutzen. Das MXML und ActionScript das gleiche ist, ist aber schon bekannt?

Code:
new DataGridColumn().itemRenderer = new ClassFactory(spark.components.Button);
oder
Code:
new DataGridColumn().itemRenderer = new spark.components.Button(); // if spark.components.Button implements IFactory

Geändert von Omega Psi (06-02-2011 um 13:35 Uhr) Grund: edit, war falsch.
Omega Psi ist offline   Mit Zitat antworten
Alt 06-02-2011, 15:08   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Öhm ja so habe ich das probiert....

Kommt aber immer dieser Fehler
Zitat:
Type Coercion failed: cannot convert spark.components::Button@b5a5c29 to mx.controls.listClasses.IListItemRenderer.



Habe zwischendurch auch sowas probiert, was aber ebenfalls nicht funktioniert.
ActionScript:
  1. var box:ClassFactory = new ClassFactory(CheckBox);
  2.                     box.properties = {selected:true} ;
  3.                     col.itemRenderer =  box;
__________________
Mein Blog
Freue mich über jeden Besucher. :)

Geändert von Nico B. (06-02-2011 um 15:12 Uhr)
Nico B. ist offline   Mit Zitat antworten
Alt 06-02-2011, 15:16   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Dann implementiert der Button nicht das entsprechende Interface. Das musst du dann entsprechend durch Vererbung durchziehen oder eben durch Aggregation lösen.
Omega Psi ist offline   Mit Zitat antworten
Alt 06-02-2011, 15:52   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Joar,

jetzt gibt's keine Fehlermeldung mehr, aber richtig funktionieren tut's nicht wirklich....
Werd gleich mal nen gesondertes Projekt erstellen und das testen bis es funktioniert.

Kann doch nicht so schwer sein, ein dynamisches Grid zu erstellen ....
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 06-02-2011, 16:04   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Es ist nicht dynamisch Sonden nur via ActionScript konfiguriert. Es sollte aber genügend Beispiele dafür im Netz geben.
Omega Psi ist offline   Mit Zitat antworten
Alt 06-02-2011, 19:01   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
ActionScript:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.                xmlns:s="library://ns.adobe.com/flex/spark"
  4.                xmlns:mx="library://ns.adobe.com/flex/mx"
  5.                width="537" height="316" minWidth="955" minHeight="600"
  6.                creationComplete="application1_creationCompleteHandler(event)"
  7.               
  8.                >
  9.    
  10.    
  11.    
  12.    
  13.     <fx:Declarations>
  14.         <!-- Platzieren Sie nichtvisuelle Elemente (z.*B. Dienste, Wertobjekte) hier -->
  15.     </fx:Declarations>
  16.    
  17.     <fx:Script>
  18.         <![CDATA[
  19.             import mx.collections.ArrayCollection;
  20.             import mx.collections.ArrayList;
  21.             import mx.collections.IList;
  22.             import mx.controls.dataGridClasses.DataGridColumn;
  23.             import mx.events.FlexEvent;
  24.            
  25.             import spark.components.CheckBox;
  26.            
  27.             [Bindable] public var gridData:ArrayCollection = new ArrayCollection([
  28.                 {firstname: "Peter", lastname: "Mustermann", training1: true, training2: false},
  29.                 {firstname: "Piere", lastname: "Mustermann", training1: false, training2: true},
  30.             ]);
  31.            
  32.  
  33.             protected function application1_creationCompleteHandler(event:FlexEvent):void
  34.             {
  35.                 var box:CheckBox = new CheckBox();
  36.                 box.selected = false;
  37.                
  38.                 DataGridColumn(this.myGrid.columns[3]).itemRenderer = new ClassFactory(CheckBox);               
  39.                 //DataGridColumn(this.myGrid.columns[3]).itemRenderer = new ClassFactory(CheckBox);
  40.                
  41.                 trace( DataGridColumn(this.myGrid.columns[3]).itemRenderer );
  42.             }
  43.  
  44.         ]]>
  45.     </fx:Script>
  46.    
  47.    
  48.     <mx:DataGrid id="myGrid"
  49.                  x="10" y="10"
  50.                  width="517"
  51.                  height="296"
  52.                  dataProvider="{this.gridData}"
  53.                 
  54.                  >
  55.        
  56.     </mx:DataGrid>
  57.    
  58.    
  59. </s:Application>

Also das ist mein Beispiel-Projekt, was ich gerade fix angelegt habe. Magst Du mir verraten was genau ich falsch mache?
Ich habe schon zig Dinge probiert und blicke es einfach net.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 06-02-2011, 22:33   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Du musst die neu Columns zuweisen.
Code:
<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="initializeHandler(event)">

    <fx:Script>
        <![CDATA[
        import mx.collections.ArrayList;
        import mx.controls.CheckBox;
        import mx.controls.dataGridClasses.DataGridColumn;
        import mx.events.FlexEvent;

        private function initializeHandler(event:FlexEvent):void
        {
            const column:DataGridColumn = new DataGridColumn();
            column.itemRenderer = new ClassFactory(mx.controls.CheckBox);

            const columns:Array = [column];

            datagrid.columns = columns;
            datagrid.dataProvider = new ArrayList([{name:"Fred", selected:false}]);
        }
        
        ]]>
    </fx:Script>

    <mx:DataGrid id="datagrid" />

</s:Application>
Omega Psi ist offline   Mit Zitat antworten
Alt 06-02-2011, 22:46   #11 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Sers,

danke schonmal dafür. Ich weiß nicht, aber irgendwie ist das ziemlich umständlich oder?

Wie kann ich denn jetzt, bsp. die höhe der Checkbox ändern?

Wenn ich sowas versuche :
ActionScript:
  1. var box:CheckBox = new CheckBox();
  2.                 box.height = 100;
  3.                
  4.                
  5.                 column.itemRenderer = new ClassFactory( box );

geht's nicht.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 07-02-2011, 06:21   #12 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Was hast du denn genau vor? Das Sizing übernimmt das DataGrid, respektive das Layout.

Ich verstehe deinen Ansatz nicht.
Omega Psi ist offline   Mit Zitat antworten
Alt 07-02-2011, 08:44   #13 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Eigentlich will ich nur ein Datagrid machen, welche über eine dynamische Anzahl an Spalten bzw. Reihen verfügt.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 07-02-2011, 08:54   #14 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Das ist eigentlich, wie gezeigt, möglich. Du solltest aber die ItemRenderer so bauen, dass sie vom DataGrid/Layout dimensioniert werden. Du kannst ja eine Factory Methode bauen und dort nach Bedarf die Columns erzeugen...
Omega Psi ist offline   Mit Zitat antworten
Alt 07-02-2011, 09:15   #15 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Was genau meinst Du mit "dass sie vom DataGrid/Layout dimensioniert werden."
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. 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
Inhalte von einem Datagrid in ein zweites Datagrid übergeben...?! dahoody Flash MX 2004 0 16-02-2005 14:19
DataGrid Ziske Komponenten und SmartClips 1 27-01-2005 08:56
DataGrid nemaxtowni Flash MX 2004 8 10-07-2004 14:10
DataGrid Hydra Flash MX 2004 0 22-06-2004 04:11
dynamisches Menü, loadMovieNum, dynamisches textfeld sweetpain ActionScript 1 3 24-02-2003 11:15


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

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


Copyright ©1999 – 2012 Marc Thiele