2010-06-10 28 views
0

我有這樣的代碼的Flex錯誤:在一個DataGrid垂直滾動

<mx:DataGrid id="tempListDG" itemDoubleClick="doubleClickHandler(event)" width="100%" height="100%" rowHeight="110" 
      draggableColumns="false" sortableColumns="false" allowMultipleSelection="false"> 
      <mx:columns> 
       <mx:DataGridColumn id="chkSel" headerText=" " width="15" sortable="false"> 
        <mx:itemRenderer> 
         <mx:Component> 
          <mx:HBox horizontalScrollPolicy="off" verticalScrollPolicy="off" paddingLeft="3"> 
           <mx:Script> 
            <![CDATA[ 

            ]]> 
           </mx:Script> 
           <mx:CheckBox name="chkSel" selected="false" /> 
          </mx:HBox> 
         </mx:Component> 
        </mx:itemRenderer> 
       </mx:DataGridColumn> 
       <mx:DataGridColumn id="sum" dataField="@summary" headerText="Summary Description" width="280" > 
        <mx:itemRenderer> 
         <mx:Component> 
          <mx:HBox name="thumbs" creationComplete="setThumbnailImage(event)" verticalAlign="top" verticalScrollPolicy="off"> 
           <mx:Script> 
            <![CDATA[ 
             import mx.controls.Text; 
             import com.azaaza.containers.HBox; 
             import com.azaaza.controls.Image; 
             import com.hwakin.tavi.model.ModelLocator; 
             import mx.controls.DataGrid; 

             private function setThumbnailImage(e:Event):void{ 
              var dg:DataGrid = DataGrid(e.target.parent.parent); 
              var dCounter:int = TemplateOpenPanel(dg.parent.parent).dCount; 
              if (dCounter+1 > XMLList(dg.dataProvider).length()){ 
               dg.validateDisplayList(); 
               return; 
              } 
              img.load(ModelLocator.getInstance().StringToBitmap(XMLList(dg.dataProvider)[dCounter][email protected])); 
              img.width = 80; 
              img.height = 110; 
              txt.htmlText = XMLList(dg.dataProvider)[dCounter][email protected]; 
              txt.maxHeight = 110; 
              dCounter++;   
              TemplateOpenPanel(dg.parent.parent).dCount = dCounter; 
             } 
            ]]> 
           </mx:Script> 
           <mx:Image id="img">         
           </mx:Image> 
           <mx:Text id="txt">         
           </mx:Text> 
          </mx:HBox> 
         </mx:Component> 
        </mx:itemRenderer> 
       </mx:DataGridColumn>     
       <mx:DataGridColumn dataField="@dateCreated" headerText="Date Created" width="100" /> 
       <mx:DataGridColumn dataField="@dateModified" headerText="Date Modified" width="100"/> 
       <mx:DataGridColumn dataField="@guid" headerText="guid" visible="false"/> 
       <mx:DataGridColumn dataField="@fileName" headerText="File Name" visible="false"/> 
       <mx:DataGridColumn dataField="@tempXml" headerText="tempXml" visible="false"/> 
      </mx:columns> 
     </mx:DataGrid> 

名爲「總和」的DataGridColumn ID創建由我裝 XML中給定的圖片和文字,但是當我使用滾動我有錯誤的數據網格。並且圖像會失調,像dateCreated和dateModified這樣的所有數據都會被混洗或者其他東西。

請幫助我這個..謝謝

回答

0

記住,項目渲染器可循環再利用,所以你不應該使用creationCompelte事件,(如果只有5項渲染器是可見的,只有7中創建,然後他們被重用,但它們只創建一次,因此創建完成只觸發一次)

我喜歡使用dataChange事件,它們在創建時以及每次itemRenderer的數據發生更改時都會工作。

2

如果您仍在尋找答案,請將其添加到您的代碼中。

1)

protected function dgtempListDG_scrollHandler(event:ScrollEvent):void 
{ 
    // TODO Auto-generated method stub 

    tempListDG.invalidateDisplayList(); 
} 

2)

scroll = "dgtempListDG_scrollHandler(event)" 

mx:datagrid添加此。