2016-06-09 4 views
0

Я использую радиокнопку внутри искрового datagrid следующим образом.DataGrid itemrenderer получает проблему во время прокрутки

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

Я создал группу для radobutton, так как хочу любой из выбранных.

<s:RadioButtonGroup id="rbgGroup" /> 

Этот рабочий режим. Но, если я выбираю любое радио, как сначала, так и прокрутку, он автоматически выбирает другую радиокнопку и сначала удаляется.

Я проверил много других сообщений, таких как this, но это не работает.

Проблема возникла только при прокрутке.
Любая помощь была бы весьма признательна.

ответ

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> 

Надеюсь, что это поможет.

1

Скорее всего, это связано с виртуальным расположением.

virtual and non-virtual:

Основное различие между виртуальным и не виртуальным макетом, как создаются многие рендеры. Не виртуальный макет создает рендерер для каждого элемента при запуске, где виртуальные макеты только создают средства визуализации для элементов, которые в настоящее время отображаются. Это огромный прирост производительности , когда у вас есть dataProviders с тысячами предметов, но только несколько показаны в любой момент времени. Искра 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> 
+0

На самом деле я могу; t понимать параграф раздела. Можете ли вы объяснить код, который я публикую в своем вопросе? – ketan

+0

Я отредактировал свой ответ с примером и более подробной информацией о виртуальном макете. –

+0

Нет, все равно я получаю такую ​​же проблему. Все еще радио выберите и отмените выбор во время прокрутки. – ketan

Смежные вопросы