2014-02-25 9 views
1

두 개의 열이있는 편집 가능한 플렉스 스파크 DataGrid가 있습니다. 매개 변수 및 값. 매개 변수의 첫 번째 열이 설정된 데이터 목록에서 오는 값으로 만 설정할 수 있도록 DataGrid를 변경하라는 메시지가 표시되었습니다.같은 행의 다른 드롭 다운 목록을 기반으로 한 드롭 다운 목록에 대해 dataprovider를 어떻게 설정합니까?

값의 두 번째 열은 매개 변수 열의 값을 기반으로하는 드롭 다운 상자에 따라 이산 값으로 설정되어야합니다.

값 열의 데이터 제공자를 설정하여 매개 변수 열의 선택한 항목에 종속되도록하는 방법은 무엇입니까?

** 여기에 제공된 코드는 간단합니다. 실제 코드에서는 아이템 렌더러를 다른 클래스로 설정했습니다. 그러나 데이터를 사용할 수 있도록이 방법을 사용해야한다면 인라인으로 처리 할 것입니다. 여기

<s:columns> 
     <s:ArrayList> 
      <s:GridColumn minWidth="100" dataField="parameter" headerText="Parameter" rendererIsEditable="true"> 
       <s:itemRenderer> 
        <fx:Component> 
         <s:GridItemRenderer> 
          <fx:Script> 
         <![CDATA[ 
           import spark.events.IndexChangeEvent; 

           protected function onParamDropListChange(event:IndexChangeEvent):void { 
            var value:String = (event.currentTarget as DropDownList).selectedItem; 
            data[column.dataField] = value; 
                     } 
           ]]> 
        </fx:Script> 

          <s:DropDownList id="paramDownList" requireSelection="true" width="100%" 
              labelField="name"  
              dataProvider="{outerDocument.loadedParamList}" 
              change="onParamDropListChange(event)"> 
          </s:DropDownList> 

         </s:GridItemRenderer> 
        </fx:Component> 
       </s:itemRenderer> 
      </s:GridColumn> 


      <s:GridColumn minWidth="200" dataField="value" headerText="Value" rendererIsEditable="true"> 
       <s:itemRenderer> 
        <fx:Component> 
         <s:GridItemRenderer> 
          <fx:Script> 
         <![CDATA[ 
           import spark.components.DataGrid; 
           import spark.events.IndexChangeEvent; 

           protected function onValueDropListChange(event:IndexChangeEvent):void { 
            var value:String = (event.currentTarget as DropDownList).selectedItem; 
            data[column.dataField] = value; 
           } 

           ]]> 
        </fx:Script> 

          <s:DropDownList id="ValueDownList" requireSelection="true" width="100%" 
              labelField="values" 
              dataProvider="{SOME_REFERENCE_TO_THE_PARAM_COLUMN_VALUE}" 
              change="onValueDropListChange(event)"> 
          </s:DropDownList> 

         </s:GridItemRenderer> 
        </fx:Component> 
       </s:itemRenderer> 

는 매개 변수 및 가능한 값의 일례이다. 사용자가에 Params 열의 한 행에 "event_group"를 선택하면

{"params": [ 
    {"name": "event_group",   "values": ["CLIENTS", "SERVERS"]}, 
    {"name": "event_sub_group",  "values": ["LOADING", "MACHINE_LOADING"]}, 
    {"name": "environment",   "values": ["stage", "production"]} 
    ] 
    } 

그래서, 나는 값 열에서 같은 행의 "클라이언트"또는 "서버"를 선택 할 수 만에 사용자가 원하는 . 일단 선택되면 값은 업데이트되어 관련 객체까지 전달됩니다.

답변

1

그래서 이것은 내가이 문제를 해결해야하는 경우 내가 먼저 그것을 시도 할 생각이다, 그래서 나는 그것이 작동하는지 모르겠습니다. 난 당신이 할 수 있다고 생각하고

을 (그것은 몇 가지 작업을해야 할 수도 있습니다) DataGrid에 표시 할 데이터를 나타내는 클래스를 만듭니다. 따라서이 클래스에는 드롭 다운에 바인딩하는 ArrayCollection 유형의 2 개의 필드가 있습니다. 사용자가 일부 드롭 다운을 변경하면 부하 데이터가 업데이트되고 데이터 그리드 업데이트가 트리거됩니다. 그래서 내 생각은,이 개 부분보기 및 모델에 코드를 분할하는 것입니다

class MyData{ 
//you dhould make all fields bindable 
public var selectedParam:String; 
public var selectedValue:String; 
public var allParams:ArrayCollection; 
public var allValues:ArrayCollection; 
//call this method when selectedParam is changed (you should make it a getter/setter and call update in the setter) 
function updateValues():void{ 
    //update the allValues by checking the selectedParam 
} 
} 

편집 : 당신이 다음 selectedParam을 설정하면 당신이 (당신이 올바른 값으로 allValues ​​수집을 채울 updateValues를 트리거 생성하거나 가능한 값이 Set에서 나온 것이면 현재 ArrayCollection을 올바른 ArrayCollection으로 바꿀 수 있습니다. EDIT2 : 각 행에 대해이 클래스의 인스턴스를 만들고 ArrayCollection에 추가 한 다음 ArrayCollection을 dataCollection으로 설정합니다 그리드.

+0

음, 나는 관계를 명확하게하지 않은 것처럼 들립니다. Params의 각 집합에는 가능한 값의 배열이 있습니다. 수정 한 경우에도 선택한 매개 변수의 값 목록을 dataprovider 또는 각 행으로 반환하는 방법은 무엇입니까? – Bob

+0

나는 뭔가를 놓치고 있어야합니다. 이 클래스의 인스턴스를 각 행에 어떻게 설정합니까? – Bob

+0

지금은 훨씬 더 의미가 있습니다. 감사합니다. – Bob