2009-10-08 71 views
0

我有按鈕像隨機點擊,如果我點擊這個按鈕,然後將選擇15 databox中的複選框itemrenderer複選框但我不能訪問複選框?請參考我?如何訪問複選框?如何在flex中的datagrid itemrenderer中選擇特定的複選框?

<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

看看這個代碼:
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> 
+0

Amarghosh謝謝你,謝謝。 我正在爲此工作很多時間,但你可以在10分鐘內完成。什麼!!!!你是一個天才。 – 2009-10-08 13:12:33

0

從複選框的更改事件處理程序調用outerDocument.someMethod(this)。這樣,​​可以訪問該複選框。

如果您將代碼分解爲不同的行,而不是將所有內容隱藏在最右端,讀取代碼會更容易。

UPDATE:

<!-- 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); 
} 
+0

好的,謝謝你的價值信息Amarghosh。 但我想如何選擇15複選框時按鈕(btn名稱是隨機)單擊。 – 2009-10-08 09:55:02

+0

已更新該帖子以在數據網格中選擇15個隨機複選框。順便說一句,你爲什麼想這樣做? – Amarghosh 2009-10-08 10:11:41

+0

用戶想要隨機選擇15複選框,所以我添加按鈕這個按鈕。我試過但顯示錯誤,如檢查沒有狡猾的價值,所以我添加// calamount是每個數據網格名稱 (var item:Calamount.dataProvider中的對象){ item .checked = true; }如果我運行我得到 顯示標籤像 2009-10-08 11:25:53

相關問題