DataGrid itemrenderer在滚动时出现问题

时间:2016-06-09 12:04:43

标签: actionscript-3 flex datagrid radio-button

我在spark datagrid中使用单选按钮,如下所示。

<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>

我为radiobutton创建了一个组,因为我想要任何一个被选中。

<s:RadioButtonGroup id="rbgGroup" />

这工作正常。但是,如果我选择任何收音机,如第一个并滚动,那么它将自动选择另一个单选按钮,并首先选择删除。

我检查过许多其他帖子,例如this,但这似乎不起作用。

问题仅在我滚动时发生。
任何帮助将非常感谢。

2 个答案:

答案 0 :(得分:1)

这很可能与虚拟布局有关。

virtual and non-virtual:

  

虚拟和非虚拟布局之间的主要区别在于如何   创建了许多渲染器。非虚拟布局会创建渲染器   对于启动时的每个项目,虚拟布局仅创建渲染器   对于当前正在查看的项目。这是一个巨大的性能提升   当你有dataProviders有成千上万的项目,但只有一个   在任何给定时间显示少数。 spark Datagrid使用布局   默认情况下打开虚拟布局。

很遗憾,您无法轻松更改Datagrids。一个常见的解决方案是将选择状态存储在数据和已覆盖的设置数据上,并根据数据设置选择状态。

评论中的每个请求代码示例:

 <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>

答案 1 :(得分:0)

我按照以下方式完成了。为所有人制作selected = false并选择更改后的内容。

<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>

希望对某人有所帮助。