2012-01-02 11 views
1

XMLファイルから値を取得するデータグリッドを持っています(FlexでPHPとHTTPリクエストを使用してこのXMLファイルをデータベースから取得しています)。私は、データグリッドのすべての行にチェックボックスを作成しました。 私はトウまたは3つのチェックボックスを選択したいと思うし、すべての値のフォームを特定のフォーム、prefered arraycollection(私は直接この棒グラフにこの配列を渡すことができます)を取得したいと思います。私がフレキシブルになったので、ある人が私を助けてくれますか?フレックスのDataGridから選択した値を取得する方法

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="siteData.send()"> 
<mx:Script> 
    <![CDATA[ 
     import mx.collections.XMLListCollection; 
     import mx.controls.*; 
     import mx.events.ListEvent; 
     import mx.rpc.events.ResultEvent; 
     import mx.controls.Alert; 
     [Bindable] private var fullXML:XMLList; 
     private function contentHandler(evt:ResultEvent):void{ 
      fullXML = evt.result.values; 
     } 

    ]]> 
</mx:Script> 
<mx:VBox> 
    <mx:Label text="This Data Grid is loading the full XML file"/> 
    <mx:DataGrid width="600" id="datagrid" dataProvider="{fullXML}"> 

     <mx:columns> 
      <mx:DataGridColumn headerText="Select"> 
       <mx:itemRenderer> 
        <mx:Component> 
         <mx:HBox horizontalAlign="center"> 

          <mx:CheckBox id="check"/> 
         </mx:HBox> 
        </mx:Component> 
       </mx:itemRenderer> 
      </mx:DataGridColumn> 
      <mx:DataGridColumn dataField="release_version" headerText="Release"/> 
      <mx:DataGridColumn dataField="build" headerText="build"/> 
      <mx:DataGridColumn dataField="time_login" headerText="time_login"/> 
      <mx:DataGridColumn dataField="time_tunnel" headerText="time_tunnel"/> 
      <mx:DataGridColumn dataField="rate_login" headerText="time_tunnel"/> 
      <mx:DataGridColumn dataField="rate_tunnel" headerText="rate_tunnel"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:VBox> 
<mx:HTTPService url="http://localhost/php_genxml.php" id="siteData" result="contentHandler(event)" resultFormat="e4x"/> 
</mx:Applicaton> 

私はいくつかのチェックボックスを選択すると、データ・グリッド内のすべてのフィールドの値を取得することチェックボックスに対応するようにしたい、いくつかのいずれかをどのように選択された値(の選択された値を得るために私を助けることができますチェックボックス)を使用します。

答えて

1
<mx:itemRenderer> 
        <mx:Component> 
         <mx:HBox horizontalAlign="center" verticalAlign="middle"> 
          <mx:Script> 
           <![CDATA[ 
            var objTemp:Object = new Object(); 

            override public function set data(value:Object):void 
            { 
             if(value != null) 
             { 
              var xml:XML = XML(value); 
              super.data = value; 
              objTemp = outerDocument.xmlToObject(xml.toString()); 
              if(objTemp.story['quiz_score'] != null) 
              { 
               chkAssignment.visible = false; 
              } 
              else 
              { 
               chkAssignment.visible = true; 
              } 
              if(objTemp.story.is_selected == false) 
              { 
               chkAssignment.selected = false; 
              } 
              else 
              { 
               chkAssignment.selected = true; 
              } 

             } 
            } 

            private function deleteAssignment():void 
            { 


             if(chkAssignment.selected) 
             { 
              outerDocument.isChanged = true; 

              objTemp.story.is_selected = true; 
              var xml:XML = outerDocument.objectToXML(objTemp,"record"); 

              var xmlList:XMLList = xml.children(); 
              xml = xmlList[0] as XML; 

              outerDocument.dgListeningLog.dataProvider[outerDocument.dgListeningLog.selectedIndex] = xml; 

              outerDocument.arrAssignment.push({"story_name": XML(outerDocument.dgListeningLog.selectedItem).story_title.toString() ,"student_assignmentId": XML(outerDocument.dgListeningLog.selectedItem).assignment_id.toString(),"session_key": XML(outerDocument.dgListeningLog.selectedItem).session_key.toString(),"selectedIndex": outerDocument.dgListeningLog.selectedIndex.toString()}); 
             } 
             else 
             { 
              outerDocument.isChanged = true; 

              objTemp.story.is_selected = false; 
              var xml:XML = outerDocument.objectToXML(objTemp,"record"); 

              var xmlList:XMLList = xml.children(); 
              xml = xmlList[0] as XML; 

              outerDocument.dgListeningLog.dataProvider[outerDocument.dgListeningLog.selectedIndex] = xml; 

              for(var i:int =0; i < outerDocument.arrAssignment.length; i++) 
              { 
               if(outerDocument.arrAssignment[i].selectedIndex == outerDocument.dgListeningLog.selectedIndex) 
               { 
                outerDocument.arrAssignment.splice(i,1); 
                break; 
               } 
              } 
             } 

            } 

           ]]> 
          </mx:Script> 
          <mx:CheckBox id="chkAssignment" change="{deleteAssignment();}"/> 
         </mx:HBox> 
        </mx:Component> 
       </mx:itemRenderer> 

ここで私は、別の配列で、選択した値または配列を格納していますし、削除ボタンをクリックしたときに、それは、DataGridのデータプロバイダであるメイン配列から値をチェックし、削除します。

データグリッド]チェックボックスをスクロールするときに問題に直面している場合は、コードからのメソッド以下のコピーよりも、間違った値を示しています

オーバーライド公共の機能設定データ(値:オブジェクト):無効

二つの機能が主にあります使用...

public function objectToXML(obj:Object, qname:String):XML 
     { 
      var qName:QName = new QName(qname); 
      var xmlDocument:XMLDocument = new XMLDocument(); 
      var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument); 
      var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(obj, qName, xmlDocument); 
      var xml:XML = new XML(xmlDocument.toString()); 
      return xml; 
     } 

     public function xmlToObject(value:String):Object 
     { 
      var xmlStr:String = value.toString(); 
      var xmlDoc:XMLDocument = new XMLDocument(xmlStr); 
      var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true); 
      var resultObj:Object = decoder.decodeXML(xmlDoc); 
      return resultObj; 
     } 
+1

こんにちはサーガルラワル、シンプルで素敵なソリューションのための おかげ..上記の作業のための –

+1

ありがとうサーガル。 –

+0

サガールさんに感謝しますが、私が添付したスクリプトをこれを行う方法を教えてください。私はあなたのスクリプトで文字列のようないくつかの機能があるように見えたischeckedなど..コードにはありません。 – tanuj