2012-09-13 2 views
0

'o'개체로 채워진 ArrayCollection이 있습니다. 이 AC는 DataGrid의 dataProvider 여야합니다. dp : dgMT.dataProvider=acDataGrid을 설정하면 DataGrid에는 arrayCollection의 마지막 항목 만 포함됩니다. 코드 :DataGrid가 적절하지 않음 dataProvider 값

[Bindable] 
     public var acDataGrid:ArrayCollection = new ArrayCollection(); 
     protected function ddlLanguage_changeHandler(event:IndexChangeEvent):void{ 

      gcTranslate.headerText=Globals.acLanguages.getItemAt(ddlLanguage.selectedIndex,0).toString(); 
      Globals.acActValues=convertXmlToArrayCollection(File.applicationDirectory.resolvePath("xmls"+File.separator+Globals.acFileNames.getItemAt(ddlLanguage.selectedIndex,0))); 

      Globals.acDataGrid.removeAll(); 
      var o:DataGridObject = new DataGridObject(); 
      var i:int=0; 
      var angol:Object; 
      for each(angol in Globals.acValues){ 
       o.en=angol.value; 
       o.name=angol.name; 

       if(i<Globals.acActValues.length && o.name==Globals.acActValues.getItemAt(i,0).name){ 
        o.translation=Globals.acActValues.getItemAt(i,0).value;     

       } 
       else{ 
        o.translation=""; 
        Globals.acActValues.addItemAt("",i); 
       } 

       acDataGrid.addItemAt(o,i); 

       trace("NAME: "+acDataGrid.getItemAt(i,0).name+" VAL:"+acDataGrid.getItemAt(i,0).en+"TRANS: "+acDataGrid.getItemAt(i,0).translation); 
// the values are different! 
       i++; 
      } 
      dgMT.dataProvider=acDataGrid;//setting the dataProvider   

     } 

하는 방법은 데이터 그리드의 행이 올바른 값으로 가득 것으로 도달 할 수 있을까? 감사합니다.

답변

1

for 루프 외부에서 o을 한 번만 인스턴스화합니다. 즉, 해당 인스턴스의 속성 값을 변경하고 동일한 인스턴스를 dataprovider에 반복해서 추가하는 것입니다. 대신 모든 반복마다 새 인스턴스를 만들어야합니다. 이 문제를 해결하려면

, 단순히 for 루프 내에서 o의 인스턴스를 이동 :

for each(angol in Globals.acValues){ 
    var o:DataGridObject = new DataGridObject(); 
    ... 
} 
+0

가 대단히 감사합니다! 너는 나에게 많은 도움을 주었다 !!! – Alex