actionscript-3 flex datagrid radio-button

actionscript 3 - Objeto DataGrid que produce un problema mientras se desplaza



actionscript-3 flex (2)

Estoy usando el botón de radio dentro de spark datagrid de la siguiente manera.

<s:DataGrid dataProvider="{arrList}" > <s:columns> <mx:ArrayList> <mx:source> <s:GridColumn width="90" headerText="radio"> <s:itemRenderer > <fx:Component> <s:GridItemRenderer> <fx:Script> <![CDATA[ override public function set data( value:Object ) : void { super.data = value; rdId.group=outerDocument.rbgGroup; } ]]> </fx:Script> <s:RadioButton id="rdId" /> </s:GridItemRenderer> </fx:Component> </s:itemRenderer> </s:GridColumn> <s:GridColumn headerText="Name" dataField="name" /> </mx:source> </mx:ArrayList> </s:columns> </s:DataGrid>

He creado group para radiobutton ya que quiero cualquiera de los seleccionados.

<s:RadioButtonGroup id="rbgGroup" />

Esto funciona bien. Pero, si selecciono cualquier radio como primero y me desplazo, seleccionará otro botón de radio automáticamente y primero se eliminará.

He comprobado muchas otras publicaciones como esta, pero parece que no funciona.

El problema ocurrió solo cuando me desplazo.
Cualquier ayuda sería muy apreciada.


Es probable que esto tenga que ver con el diseño virtual.

virtual y no virtual:

La principal diferencia entre un diseño virtual y no virtual es cuántos representadores se crean. Un diseño no virtual crea un representador para cada elemento al inicio, donde los diseños virtuales solo crean representadores para los elementos que están actualmente a la vista. Esta es una gran ganancia de rendimiento cuando tiene dataProviders con miles de elementos, pero solo un puñado se muestran en un momento dado. La chispa Datagrid utiliza un diseño que activa el diseño virtual de forma predeterminada.

Lamentablemente, no puede cambiar esto fácilmente para Datagrids. Una solución común es almacenar el estado de selección en los datos y en los datos del conjunto que ya está anulando también establecer el estado de selección en función de los datos.

Por solicitud en el comentario una muestra de código:

<s:GridItemRenderer> <fx:Script> <![CDATA[ override public function set data( value:Object ) : void { super.data = value; rdId.group=outerDocument.rbgGroup; //just like you are setting the group, mark it as selected based on the data. //Update your data when it becomes selected. rdId.selected = value.selected; } protected function rb_clickHandler(event:Event):void { data.selected = rbId.selected; } ]]> </fx:Script> <s:RadioButton id="rdId" change="rdId_clickHandler(event)"/> </s:GridItemRenderer>


Lo he hecho siguiendo el camino. Hecho selected = false para todos y hecho seleccionado que se cambia.

<s:GridItemRenderer> <fx:Script> <![CDATA[ import spark.components.RadioButtonGroup; [Bindable] private static var rbgGroup:RadioButtonGroup = new RadioButtonGroup(); override public function set data( value:Object ) : void { super.data = value; } protected function rdId_changeHandler(event:Event):void { if(outerDocument.arrList != null) { for each(var obj:Object in outerDocument.arrList) { obj.selected = false; } } data.selected=true; } ]]> </fx:Script> <s:RadioButton id="rdId" group="{pndcGroup}" selected="{data.selected}" change="rdId_changeHandler(event)" /> </s:GridItemRenderer>

Espero que ayude a alguien.