2011-12-01 93 views
0

我有一個itemRenderer作爲Flex DataGrid中的複選框。Flex ItemRenderer as CheckBox

現在,我想確保只有一個複選框被選中在時間。如果用戶選擇了一個複選框,然後嘗試選擇另一個複選框,則先前的選擇應該被取消。

在Flex中如何做?

編輯:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"> 



    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.controls.CheckBox; 
      import mx.controls.RadioButton; 
      import mx.controls.RadioButtonGroup; 

      [Bindable] 
      protected var renderer:ClassFactory; 

      protected function initRenderer() { 
       var group:RadioButtonGroup = new RadioButtonGroup(); 
       var renderer = new ClassFactory(RadioButton); 
       renderer.properties = {group:group}; 
      } 

      private var arrayC:ArrayCollection = new ArrayCollection 
       (
        [ 
         {fname:"Person1",isSelected:false}, 
         {fname:"Person2",isSelected:false}, 
         {fname:"Person3",isSelected:false} 
        ] 
       ); 

        // To be called when we uncheck checkbox .. 
      private function unSelect(event:MouseEvent):void { 

      } 
     ]]> 
    </mx:Script> 
    <mx:DataGrid id="dg" x="400" y="400" dataProvider="{arrayC}"> 
     <mx:columns> 
      <mx:DataGridColumn id="dgc1" itemRenderer="{renderer}"/> 
      <mx:DataGridColumn id="dgc2" dataField="fname"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

回答

2

嘗試是這樣的:

[Bindable] 
protected var renderer:ClassFactory; 

protected function initRenderer() { 
    var group:RadioButtonGroup = new RadioButtonGroup(); 
    var renderer = new ClassFactory(RadioButton); 
    renderer.properties = {group:group}; 
} 

綁定你列的itemRenderer屬性來渲染器。

編輯: 原本在這篇文章上的另一個答案解釋說,當所需功能是使用者期望從單選按鈕時使用複選框不是一個好主意。用戶期望他們看到複選框時,他們可以檢查多個複選框。 http://www.useit.com/alertbox/20040927.html

+0

我希望我的複選框能像RadioButton一樣工作。在哪裏編寫這段代碼? – tomjerry

+0

,這裏是什麼?{group:group}? – tomjerry

+0

使用RadioButton的圖標樣式使其看起來像複選框。或者編寫自己的CheckBox類。 –