• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-03-2010, 16:49   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
Datagrid via Code sortieren

Hallo Leute,

gibt es eine einfache Variante, in Flex ein DataGrid zu sortieren? Normalerweise klickt der User zum Sortieren oben auf den Header des DataGrids. Kann ich diese Sortierung auch irgendwie im Code anstoßen? Also via Actionscript oder mxml?

Wäre super, wenn ihr da etwas wüsstet.

Ich möchte immer bei einem neuen Eintrag automatisch sortieren lassen. Es muss aber nicht voll automatisch sein. Ich könnte also auch jedesmal eine Funktion aufrufen. Ich weiß nur nicht, wie ich es sortieren lassen kann.

Danke
Bastl-Wastl ist offline   Mit Zitat antworten
Alt 05-03-2010, 16:59   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Ein Blick in die API und du hättest dir Zeit gespart:
Code:
sortable="true|false"
sortCompareFunction="No default"
sortDescending="false|true"
Über die DataGridColumn konfigurierbar.
Omega Psi ist offline   Mit Zitat antworten
Alt 05-03-2010, 20:02   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
hmm ok... ich Vollpfosten hatte keine SortAndCompareFunction.

Actionscript:
Code:
private var daten:Array = new Array();
private var userAlter:Number;
private var userName:String;

var meinObject:Object = new Object();	
meinObject.name = userName;
meinObject.alter = userAlter;

daten.push(meinObject);
uebersicht.dataProvider = daten;

private function mycompare(itemA:Number, itemB:Number):int {
       return ObjectUtil.numericCompare(itemA, itemB);
}
MXML:
Code:
<mx:DataGrid left = "10" right = "10" id = "uebersicht" height = "100%" bottom = "10" top = "84">
		<mx:columns>
			<mx:DataGridColumn headerText = "Name"  dataField = "name"/>
			<mx:DataGridColumn id="test" headerText = "" dataField = "alter" 
width = "40" sortCompareFunction="compare" sortable="true" sortDescending="true"/>
		</mx:columns>
</mx:DataGrid>
Leider funktioniert es damit auch nicht! :-( Liegt wohl an der Funktion. Denn beim klicken des Header funktioniert es auch nicht.
Bastl-Wastl ist offline   Mit Zitat antworten
Alt 05-03-2010, 21:59   #4 (permalink)
Neuer User
 
Registriert seit: Oct 2008
Beiträge: 148
hi,
wenn du bei zb. bei personen nach alter sortierst, macht es sinn auch nach dem namen zusätzlich zu sortieren, weil du sonst unter umständen doch keine visuell logische reihenfolge hast... kannst ja mal ausprobieren mit compare und compare1 als funktion, dann siehst du den unterschied... gerade bei personen würde ich auch noch auf den nachnamen gehen, vor dem vornamen... dann kommt auch mit sicherheit "peter pan" vor "peter panzer" ... ;-)

Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication applicationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
	<![CDATA[
		import mx.utils.ObjectUtil;
		import mx.collections.ArrayCollection;
		[Bindable]
		private var persons : ArrayCollection;
		
		private function init():void{
			this.persons = new ArrayCollection();
			
			this.persons.addItem( {name:"Hans",alter:12} );
			this.persons.addItem( {name:"Hans",alter:15} );
			this.persons.addItem( {name:"Hans",alter:17} );
			this.persons.addItem( {name:"Paul",alter:12} );
			this.persons.addItem( {name:"Paul",alter:15} );
			this.persons.addItem( {name:"Paul",alter:17} );
			this.persons.addItem( {name:"Peter",alter:12} );
			this.persons.addItem( {name:"Peter",alter:15} );
			this.persons.addItem( {name:"Peter",alter:17} );
			
		}
		
		private function compare(itemA:Object,itemB:Object):int{
			var alterCompare : int = ObjectUtil.numericCompare( itemA.alter,itemB.alter);
			return alterCompare;
		}
		
		private function compare1(itemA:Object,itemB:Object):int{
			var compare : int =  ObjectUtil.numericCompare( itemA.alter,itemB.alter);
			if( compare == 0){
				compare = ObjectUtil.stringCompare( itemA.name,itemB.name, true);
			}
			return compare;
		}
	]]>
</mx:Script>
	<mx:DataGrid dataProvider="{this.persons}" left = "10" right = "10" id = "uebersicht" height = "100%" bottom = "10" top = "84">
		<mx:columns>
			<mx:DataGridColumn headerText = "Name"  dataField = "name"/>
			<mx:DataGridColumn id="test" headerText = "" dataField = "alter" width = "40" sortCompareFunction="compare1" sortable="true" sortDescending="true"/>
		</mx:columns>
</mx:DataGrid>
</mx:WindowedApplication>
sytch ist offline   Mit Zitat antworten
Alt 06-03-2010, 14:37   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
Jetzt scheine ich schon mal einen Schritt weiter zu sein. Wenn ich jetzt oben auf den Header klicke, wird sortiert. Ich würde aber gerne bei jedem neuen Hinzufügen neu sortieren.

Das klappt bisher noch nicht.
Bastl-Wastl ist offline   Mit Zitat antworten
Alt 06-03-2010, 19:00   #6 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
Steh ich jetzt auf dem Schlauch? Oder geht das wirklich nicht so einfach? Oder habe ich irgendwas vergessen?
Bastl-Wastl ist offline   Mit Zitat antworten
Alt 07-03-2010, 07:56   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2008
Beiträge: 148
hi,

also bei mir geht das so. entscheidend ist einfach, dass du schon einmal nach der spalte alter sortiert hast. die neuen personen werden dann ans richtige ort geaddet....

Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication applicationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
	<![CDATA[
		import mx.utils.ObjectUtil;
		import mx.collections.ArrayCollection;
		[Bindable]
		private var persons : ArrayCollection;
		
		private function init():void{
			this.persons = new ArrayCollection();
			
			this.persons.addItem( {name:"Hans",alter:12} );
			this.persons.addItem( {name:"Hans",alter:15} );
			this.persons.addItem( {name:"Hans",alter:17} );
			this.persons.addItem( {name:"Paul",alter:12} );
			this.persons.addItem( {name:"Paul",alter:15} );
			this.persons.addItem( {name:"Paul",alter:17} );
			this.persons.addItem( {name:"Peter",alter:12} );
			this.persons.addItem( {name:"Peter",alter:15} );
			this.persons.addItem( {name:"Peter",alter:17} );
			
		}
		
		private function compare(itemA:Object,itemB:Object):int{
			var alterCompare : int = ObjectUtil.numericCompare( itemA.alter,itemB.alter);
			return alterCompare;
		}
		
		private function compare1(itemA:Object,itemB:Object):int{
			var compare : int =  ObjectUtil.numericCompare( itemA.alter,itemB.alter);
			if( compare == 0){
				compare = ObjectUtil.stringCompare( itemA.name,itemB.name, true);
			}
			return compare;
		}
		
		private function addPerson():void{
			this.persons.addItem({name:this.nameInput.text,alter:Number(this.alterInput.text)});
		}
	]]>
</mx:Script>
	<mx:DataGrid dataProvider="{this.persons}" left = "10" right = "10" id = "uebersicht" height = "100%" bottom = "10" top = "84">
		<mx:columns>
			<mx:DataGridColumn headerText = "Name"  dataField = "name"/>
			<mx:DataGridColumn id="test" headerText = "" dataField = "alter" width = "40" sortCompareFunction="compare1" sortable="true" sortDescending="true"/>
		</mx:columns>
</mx:DataGrid>
	<mx:HBox y="26" left="10" right="10">
		<mx:Button label="Add Person" click="addPerson()"/>
		<mx:Label text="NAME"/>
		<mx:TextInput id="nameInput"/>
		<mx:Label text="ALTER"/>
		<mx:TextInput id="alterInput"/>
	</mx:HBox>
</mx:WindowedApplication>
sytch ist offline   Mit Zitat antworten
Alt 07-03-2010, 16:28   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
Bin mir nicht sicher, ob wir das gleiche meinen. Ich geb mal ein Beispiel:
Der User trägt einen neuen Benutzer A ein. Alter wäre 20.

Dieser steht also an erster stelle. Dann trägt er einne Benutzer B ein. Alter ist 30. Benutzer B kommt an erste Stelle und A kommt an 2. Stelle.

Dann legt er einen Benutzer C an. Alter ist 10 Jahre. Benutzer C kommt an 3. Stelle. B (30) --> A (20) --> C (10)

Und das soll alles beim Anlegen neuer Benutzer passieren. Also OHNE, dass der User oben auf den Header klicken muss. Bei mir wird erst sortiert, wenn ich auf den DataGrid-Header klicke. Und das ist nicht gewünscht.

danke
Bastl-Wastl ist offline   Mit Zitat antworten
Alt 07-03-2010, 16:33   #9 (permalink)
Neuer User
 
Registriert seit: Oct 2008
Beiträge: 148
hi,
dann würde ich die sortierung der spalte ausschalten und die collection sortieren mit einer sortFunction. die kannst du dann sobald du eine person hinzugefügt hast mit refresh() aktualisieren....
sytch ist offline   Mit Zitat antworten
Alt 07-03-2010, 16:34   #10 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
ok, das klingt gut. werde ich mal probieren. dank Data-Binding sollte das auch einfacher sein, als in anderen sprachen. ;-)

Danke nochmal sytch!!!
Bastl-Wastl ist offline   Mit Zitat antworten
Alt 07-03-2010, 16:42   #11 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 135
So, mein Feedback:

Hat super geklappt. Danke an alle!!!!

hier mein Code:

Code:
var dataSortField:SortField = new SortField();
                dataSortField.name = "alter";
                dataSortField.numeric = true;

                var numericDataSort:Sort = new Sort();
                numericDataSort.fields = [dataSortField];

                alleDaten.sort = numericDataSort;
                alleDaten.refresh();
Bastl-Wastl 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
Datagrid soll richtig sortieren deak Flash CS3 Professional 0 14-05-2009 12:43
umlaute im datagrid sortieren hds26846 Komponenten und SmartClips 1 19-02-2008 13:04
datagrid + DB --- sortieren von text mit zahlen VT3 PHP und MySQL 2 09-07-2006 12:52
Datagrid: Inhalte richtig sortieren supatascha Komponenten und SmartClips 1 12-09-2005 15:56
Datum sortieren Datagrid asauer Flash MX 1 01-04-2004 14:44


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele