Radiobutton-Itemrenderer ->Problem mit RadioButtonGroup

Christin85

Grünschnabel
Hallo zusammen,

ich hoffe ich bin an dieser Stelle hier richtig und mir kann jemand helfen.

Ich erstelle in einer mxml-Datei komplett mittels Actionscript ein dynamisches Datagrid, welches sich die Daten aus einer XML-Struktur holt. In diesem Datagrid sind Radiobuttons enthalten, welche mit Hilfe eines Itemrenderer erzeugt und anhand der Daten aus dem XML vorbelegt werden.
Schwierigkeit: Die Radiobuttons sollen splatenweise gruppiert werden, d.h. pro Spalte kann ein Radiobutton selektiert werden.
Mir ist bewusst, dass das mit der RadioButtonGroup zusammenhängt. Im Internet haben ich gelesen, dass ich die Buttongroup im Hauuptdokument erstellen muss und dann im Renderer darauf zugreifen und diese zuweisen sollte. Bei mir sieht es derzeit wie folgt aus. Das Grid wird erstellt und pro Spalte ist ein Radiobutton vorselektiert. Nun kann ich aber mit nur "1 Punkt" zwischen allen anderen nicht selektierten Buttons spaltenübergreifend hin- und herspringen und die vorselektierten Buttons bleiben völlig unberührt.

Weiß vielleicht jemand Rat und kann mir bei der Lösung des Problems helfen? Hab schon eine ganze Menge probiert, aber die 100%ig richtige Lösung habe ich leider noch nicht zusammengebaut bekommen.

Schonmal vielen Dank für eure Hilfe,
Christin

MXML-Datei
Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" >
<mx:Script>
	<![CDATA[
		import mx.controls.RadioButtonGroup;
		import mx.controls.RadioButton;
		import mx.collections.XMLListCollection;
		import mx.collections.ArrayCollection;
		import mx.controls.dataGridClasses.DataGridColumn;
		import mx.controls.DataGrid;
		
		public var grid_stückliste : DataGrid = new DataGrid();
		public var column_liste : DataGridColumn;
		public var column: DataGridColumn;
		public var length:int;
		public var newColumns_stückliste:Array = new Array();
		public var groups_stückliste:Array = new Array();
		
		public var  xml_stückliste:XML = new XML(		
		<stückliste>
			<info anzahl="3" generator1="Generator XY" generator2="Generator YZ" generator3="Generator VW"/>
			<liste text="Stückliste1 | Pyro1" generator1="true"  generator2="false"  generator3="true"/>
			<liste text="Stückliste1 | Pyro2" generator1="false" generator2="false" generator3="false"/>
			<liste text="Stückliste2 | Pyro1" generator1="false" generator2="true" generator3="false"/>
			<liste text="Stückliste2 | Pyro2" generator1="false" generator2="false" generator3="false"/>
		</stückliste>);
		
		private function init() : void{

			grid_stückliste.dataProvider= xml_stückliste.liste;
			grid_stückliste.percentWidth=75;
			column_liste = new DataGridColumn();
			column_liste.headerText ="";
			column_liste.dataField ="@text"
			newColumns_stückliste.push(column_liste);
			length = xml_stückliste.info.@anzahl;
			for ( var i:int =1;i<=length;i++){
				column = new DataGridColumn();
				column.dataField = "@generator"+i;
				var RadioRenderer:ClassFactory = new ClassFactory(RadioButtonRenderer);
  				column.itemRenderer= RadioRenderer;
  				column.setStyle("textAlign", "center");
				newColumns_stückliste.push(column);
			}		
			grid_stückliste.columns = newColumns_stückliste;
			grid_stückliste.showHeaders = false;
			grid_stückliste.y =63;

			addChild(grid_stückliste);
				
		} 
     	
	]]>
</mx:Script>
	
</mx:Application>

RadioButtonRenderer
Code:
package
{
	import mx.controls.RadioButton;
	
	public class RadioButtonRenderer extends RadioButton
	{
		public function RadioButtonRenderer()
		{
			super();
		}
		
		override protected function createChildren():void
		{
			super.createChildren();
		}

		override protected function commitProperties():void
		{
			super.commitProperties();
		    if (this.data)
		    {
		    	var i:int  = this.listData.columnIndex;
		    	this.group = this.parentApplication.groups_stückliste[i];
		    	this.selected = this.listData.label == "true"	
		    }
		    else
		    {
		    	this.selected = false;
		    }
		}

	}
}
 
Guten Morgen,

ich hab es jetzt soweit geschafft, meinen RadioButtonRenderer anzupassen, dass die RadioButtons spaltenweise gruppiert sind (Durchklicken funktioniert).
Nur leider greift jetzt die Vorbelegung nicht mehr ...

Code:
package
{
	import mx.controls.RadioButton;
	
	public class RadioButtonRenderer extends RadioButton
	{
		public function RadioButtonRenderer()
		{
			super();
		}
		
		override protected function createChildren():void
		{
			super.createChildren();
		}

		override protected function commitProperties():void
		{
			var i:int = this.listData.columnIndex;
			this.group = this.parentApplication.groups_stückliste[i];
		    if (this.data)
		    {	
		    		this.selected = this.listData.label == "true";	
		    }
		    else
		    {
		    	this.selected = false;
		    }
		}

	}
}

Weiß denn niemand Rat?
 
HIer die Lösung ...

Code:
package
{
	import flash.events.MouseEvent;
	import mx.controls.RadioButton;
	import mx.controls.listClasses.BaseListData;
	import mx.controls.listClasses.IDropInListItemRenderer;
	
	public class RadioButtonRenderer_Liste extends RadioButton implements IDropInListItemRenderer
	{
   		private var _listData:BaseListData;
   		private var _data:Object;
   		
		public function RadioButtonRenderer_Liste()
		{
			super();
		}
		
		override public function get listData():BaseListData
		{
			return this._listData;
		}

		override public function set listData(value:BaseListData):void
		{
			this._listData = value;
			invalidateProperties();
		}
		
        override public function set data( value:Object ) : void 
        { 
            _data = value; 
             
            if( value ) 
            { 
                this.selected=this.listData.label=="true";
            }
        }
		
		override protected function createChildren():void
		{
			super.createChildren();
		}

		override protected function commitProperties():void
		{
			var i:int = this.listData.columnIndex;
			this.group = this.parentApplication.groups_stückliste[i];

		}

	}
}
 

Neue Beiträge

Zurück