如何在flex中选择datagrid itemrenderer中的特定复选框?

时间:2009-10-08 09:37:13

标签: php flex flex3 air desktop-application

我有随机点击按钮,如果我点击此按钮然后将在datagrid itemrenderer复选框中选择15复选框但是我无法访问该复选框?请转介我?如何访问复选框?

<mx:DataGridColumn headerText="1"  rendererIsEditor="true" editorDataField="selected">
     <mx:itemRenderer> 
<mx:Component> 
<mx:CheckBox textAlign="center" click="{data.check1 = (data.check1 != 'true') ? 'true' : 'false'};outerDocument.toggleCheckbox(data);outerDocument.calcValues();" dataChange="this.selected=outerDocument.validateCheckbox(data)" themeColor="#ffff00" fillAlphas="[1, 1, 0.75, 0.65]" fillColors="[#f7f7d3, #ffffff, #ff9900, #ffff00]" /> 
     </mx:Component>
     </mx:itemRenderer>
     </mx:DataGridColumn>

2 个答案:

答案 0 :(得分:2)

查看此代码:
Data.as

package
{
    public class Data
    {
        [Bindable]
        public var name:String;

        [Bindable]
        public var checked:Boolean;
        public function Data(name:String, checked:Boolean)
        {
            this.name = name;
            this.checked = checked;
        }
    }
}

<强> Test.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
    xmlns:local="*" creationComplete="create();">
    <mx:Button label="Randomize" click="randomize()"/>
    <mx:Button label="Trace selected indices" click="traceValues()"/>
    <mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" 
        dataProvider="{dp}">
        <mx:columns>
            <mx:DataGridColumn dataField="name" headerText="Name"/>
            <mx:DataGridColumn headerText="Checked" dataField="checked">
              <mx:itemRenderer>
                <mx:Component>
                  <mx:CheckBox selected="{data.checked}" 
                    change="{data.checked = this.selected;}/>
                </mx:Component>
              </mx:itemRenderer>
            </mx:DataGridColumn>
        </mx:columns>
    </mx:DataGrid>
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            [Bindable]
            public var dp:ArrayCollection;
            public function create():void
            {
                var array:Array = [];
                for(var i:Number = 0; i < 20; i++)
                    array.push(new Data("The Name", false));
                dp = new ArrayCollection(array);
            }
            private function randomize():void
            {
              var selectedNumbers:Array = [];
              var randomNumber:Number;
              for(var i:Number = 0; i < 5; i++)
              {
                do
                  randomNumber = Math.floor(Math.random() * 20);
                while(selectedNumbers.indexOf(randomNumber) != -1);
                dp.getItemAt(randomNumber).checked = !dp.getItemAt(randomNumber).checked;
                selectedNumbers.push(randomNumber);
              }
            }
            private function traceValues():void
            {
              for(var i:Number = 0; i < 20; i++)
              {
                if(dp.getItemAt(i).checked)
                  trace(i);
              }
            }
        ]]>
    </mx:Script>
</mx:Application>

答案 1 :(得分:0)

从复选框的更改事件处理程序中调用outerDocument.someMethod(this)。这样,someMethod(checkBox:CheckBox)就可以访问该复选框。

如果将代码分解为不同的行而不是隐藏在最右端的所有内容,那么读取代码会更容易。

更新:

<!-- this is your DataGridColumn's itemRenderer -->
<mx:itemRenderer>  
  <mx:Component>
    <mx:CheckBox textAlign="center" selected="{data.checked}"/>
  <mx:Component>
<mx:itemRenderer>

将其添加到随机按钮的点击处理程序中:

var selectedNumbers:Array = [];
var randomNumber:Number;
for(i = 0; i < 15; i++)
{
  do
    randomNumber = Math.floor(Math.random() * 40);
  while(selectedNumbers.indexOf(randomNumber) != -1);
  //dp is the data provider of the data grid
  dp.getItemAt(randomNumber).checked = true;
  selectedNumbers.push(randomNumber);
}