2009-09-25 4 views
0

itemRenderer를 사용하여 advancedDataGrid 열에 라디오 버튼을 만드는 예측할 수없는 동작이 있습니다. 유사한 종류의 문제가 Creating a column of RadioButtons in Adobe Flex에보고되었습니다. 동일한 프로 시저를 사용하려고했는데, selected 라디오 버튼과 selectedValue 및 value 속성을 관련된 빈의 속성에 지정된 속성으로 바인딩했지만 여전히 문제에 직면했습니다.Adobe Flex에서 RadioButton의 열 만들기

버튼 변경 값! 선택한 버튼이 선택 취소되고 선택 취소 된 버튼이 으로 선택됩니다.

다음

내 advancedDataGrid의 코드입니다 :

<mx:AdvancedDataGrid id="adDataGrid_rptdata" 
       width="100%" height="100%" 
       dragEnabled="false" sortableColumns="false" 
       treeColumn="{action}" 
       liveScrolling="false" 
       displayItemsExpanded="true" > 

       <mx:dataProvider> 
        <mx:HierarchicalData source="{this.competenceCollection}" childrenField="competenceCriteria"/> 
       </mx:dataProvider> 

       <mx:columns> 
        <mx:AdvancedDataGridColumn headerText="" id="action" dataField="criteriaName" /> 

        <mx:AdvancedDataGridColumn headerText="Periode 1" dataField="" width="200"> 
         <mx:itemRenderer> 
          <mx:Component> 
           <mx:HBox horizontalAlign="center" width="100%" verticalAlign="middle">         
            <mx:RadioButton name="period1" value="{data}" selected="{data.period1}" group="{data.radioBtnGrpArray[0]}" visible="{data.showRadioButton}" /> 
           </mx:HBox> 
          </mx:Component> 
         </mx:itemRenderer> 
        </mx:AdvancedDataGridColumn> 

        <mx:AdvancedDataGridColumn headerText="Periode 2" dataField="" width="200"> 
         <mx:itemRenderer> 
          <mx:Component> 
           <mx:HBox horizontalAlign="center" width="100%" verticalAlign="middle">         
            <mx:RadioButton name="period2" value="{data}" selected="{data.period2}" group="{data.radioBtnGrpArray[1]}" visible="{data.showRadioButton}" /> 
           </mx:HBox> 
          </mx:Component> 
         </mx:itemRenderer> 
        </mx:AdvancedDataGridColumn> 

        <mx:AdvancedDataGridColumn headerText="Periode 3" dataField="" width="200"> 
         <mx:itemRenderer> 
          <mx:Component> 
           <mx:HBox horizontalAlign="center" width="100%" verticalAlign="middle">         
            <mx:RadioButton name="period3" value="{data}" selected="{data.period3}" group="{data.radioBtnGrpArray[2]}" visible="{data.showRadioButton}" /> 
           </mx:HBox> 
          </mx:Component> 
         </mx:itemRenderer> 
        </mx:AdvancedDataGridColumn> 
       </mx:columns> 
      </mx:AdvancedDataGrid> 

주변에 높은이 점에서 평가되는 모든 작업!

답변

0

선택한 버튼이 선택 취소되고 선택되지 않은 버튼이 선택됩니다.

selected 상태가 사용자에 의해 수동으로 변경된 라디오 버튼에만이 문제가 발생합니까? 이 경우 flex는 RadioButton을 다시 사용할 때 선언에 언급 된 값을 기준으로 selected 상태를 다시 설정하기 때문입니다. Periode 1 열에서 비율 버튼을 선택/선택 해제하더라도 멀리 스크롤하고 돌아올 때 flex는 {data.period1}으로 재설정합니다. 수정 사항을 다시 데이터 제공 업체에 저장하도록 열을 편집 가능하게 만들면됩니다. 에 열 선언을 변경해보십시오 :

<mx:AdvancedDataGridColumn headerText="Periode 1" dataField="" width="200" 
    editable="true" rendererIsEditor="true" editorDataField="selected"> 

편집 :이 시도 - 라디오 버튼을 선택하면 데이터 공급자 변경을 시도. 메모리에서 작성되고 테스트되지 않은 코드에는 버그가있을 수 있습니다.

<mx:AdvancedDataGridColumn headerText="Periode 1" dataField="" width="200"> 
    <mx:itemRenderer> 
    <mx:Component> 
     <mx:HBox horizontalAlign="center" width="100%" 
     verticalAlign="middle"> 
     <mx:RadioButton id="rb" name="period1" value="{data}" 
      selected="{data.period1}" 
      group="{data.radioBtnGrpArray[0]}" visible="{data.showRadioButton}" 
      change="outerDocument.handleRadio1(this);"/> 
     </mx:HBox> 
    </mx:Component> 
    </mx:itemRenderer> 
</mx:AdvancedDataGridColumn> 
//in a script tag outside the datagrid. 
public function handleRadio1(renderer:IListItemRenderer):void 
{ 
    var index:Number = adDataGrid_rptdata.itemRendererToIndex(renderer); 
    this.competenceCollection[i].period1 = renderer.rb.selected; 
} 
+0

아무 일도 없었습니다. 같은 상황. 왜 flex가 {data.period1}을 스크롤하여 다시 설정하고 다시 돌아 오는지, RadioButtonGroup의 change 이벤트에 {data.period1}을 명시 적으로 변경했지만 어떻게 되나요? –

+0

Flex는 itemRenderers를 재활용합니다. 따라서 목록에 100 개 항목이 있지만 한 번에 10 개만 보이면 flex는 10 개의 렌더러를 만들고 목록을 스크롤하면서 값을 변경합니다. 표시 범위가 2 ~ 11의 경우, 1 번째의 아이템을 표시 한 라디오 버튼은 11 번째의 아이템을 표시합니다. Flex는, set 데이터 메소드를 사용해 itemRenderer의 프롭퍼티를 변경합니다. 따라서 아이템 렌더러가 재사용 될 때마다 set 데이터 메소드가 호출되고 모든 속성이 데이터에 따라 재설정됩니다. 해결 방법은 버튼을 선택할 때 데이터를 변경하는 것입니다. – Amarghosh

+0

라디오 버튼을 클릭하면 데이터 제공 업체를 변경하는 코드로 게시물을 업데이트했습니다. 그것이 효과가 있는지보십시오. – Amarghosh

관련 문제