2011-12-01 70 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类。 –