Flex3.0&AS3 2009. 2. 13. 17:00

advanceddatagrid 에서 체크박스 랜더러 사용하기


datagrid 컬럼에 렌더러와 rendererIsEditor에 true으로 설정후에 랜더러 설정해주면 정상적으로 동작한다.

데이타 그리드안에 체크박스 넣을시 스크롤시에 체크박스가 비정상적으로 체크되는 현상이 발생한다.
데이타 그리드의 row인덱스값에 따라서 해당위치에 표시가 되는현상이기때문에 이런 부분을 예방하기 위해서는
체크여부와 체크박스의 위치를 기억할수있는 label을 만들어서 편법으로 만들어주었다.

이 선택여부와 label 번호를 기억(저장)되고 있는 부분이 있어야 하는데 db로부터 데이타를 받아온후에 가상으로
아래처럼 필드를 추가해주었다.

for(var i:int=0; i<main_dataList.length; i++)
    {
     main_dataList[i].IsChecked = false;
     main_dataList[i].No = i;
    }

아래처럼 for문돌면서 check여부를 확인해서 체크된녀석들만 뭔가 수행하고자하는 작업을 넣어주면 될듯함.

for(var i:int=0; i<main_dataList.length; i++)
    {
     if(main_dataList[i].IsChecked)
      trace(main_dataList[i].PPE_CONTENT+' : '+main_dataList[i].No+' : '+main_dataList[i].IsChecked);
    }


datagrid 일부..

<mx:DataGridColumn  itemRenderer="MASTER.SWF.CheckboxRenderer"     rendererIsEditor="true" />




CheckboxRenderer.mxml 렌더러파일

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" implements="mx.controls.listClasses.IDropInListItemRenderer">
        <mx:Script>
          <![CDATA[
           import mx.controls.Alert;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
            import Dsic.Controls.DsDataGrid;
           import mx.controls.DataGrid;
           import mx.controls.dataGridClasses.DataGridListData;
           import mx.controls.listClasses.BaseListData;
  
           private var _listData:BaseListData;
           public function get listData():BaseListData {
             return _listData;
           }
           public function set listData( value:BaseListData ):void {
             _listData = value;
           }
             
           private function changeCB(evt:MouseEvent):void {
             var myListData:AdvancedDataGridListData = evt.target.parentDocument.listData;
             var myDG:DsDataGrid = DsDataGrid(myListData.owner);
             myDG.document.main_dataList[Number(no.text)].No = no.text;
             myDG.document.main_dataList[Number(no.text)].IsChecked =!data.IsChecked;
           } 
          
          
          ]]>
        </mx:Script>
       
         <mx:Text id="no" text="{data.No}" visible="true" width="0"/>
         <mx:CheckBox id="cb" selected="{data.IsChecked}" click="changeCB(event)"/>
</mx:HBox>