2012-01-02 5 views
1

XML 파일 (PHP에서 HTTP 요청을 사용하여 데이터베이스에서이 XML 파일을 가져 오는)에서 값을 가져 오는 데이터 격자가 있습니다. 데이터 그리드의 모든 행에 체크 박스를 만들었습니다. 그리고 여기에 내 요구 사항은 다음과 같습니다. 견인 또는 3 개의 체크 박스를 선택하고 모든 값 양식을 특정 양식, 선호되는 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> 

나는 다른 배열의 선택된 값 또는 배열을 저장하고 상기 제거 버튼을 클릭 할 때 확인하고 데이터 그리드의 데이터 제공 메인 배열의 값을 삭제한다.

은 주로 두 가지 기능이 있습니다

무효 :

재정의 공공 기능 세트 데이터 (값 : 개체)

는 데이터 그리드의 체크 박스를 스크롤 문제에 직면하는 경우 코드에서 다음과 같은 방법으로 복사보다 잘못된 값을 보여줍니다 사용 ...

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

안녕 사가르 Rawal, 간단하고 좋은 솔루션 감사합니다 .. 위의 작업 –

+1

감사 사가르. –

+0

Sagar에게 감사 드려요.하지만이 스크립트를 어떻게 첨부했는지 알려주세요. stringtoxml ischecked 등의 함수가있는 것처럼 보이는 스크립트로 시도했습니다. 코드에는 포함되어 있지 않습니다. – tanuj

관련 문제