2014-03-06 40 views
0

在我的應用程序中,我有一個動態創建的數據網格。 對於datagrid中的每個單元格,我都有複選框作爲itemrenderer。 截至目前它工作正常預期。但同時滾動垂直複選框選擇/未選中自動。我也有同樣的問題在「水平滾動」,但我解決它通過設置「minWidth」每列。DataGrid中的CheckBox itemrenderer在FLEX中滾動時被選中/未選中

我創建的DataGrid這樣,

for(i=0;i<recordCount;i++) 
      { 
       var obj:Object = new Object(); 
       for(var j:int=0;j<maxPages;j++){ 

        { 
         obj["page"+(j+1)]=((xml..item.(pageOrder==(j+1))).length()>i)?(xml..item.(pageOrder==(j+1)))[i].pageTempVerId[0].toString()+" ("+(xml..item.(pageOrder==(j+1)))[i].pageVerUserName[0].toString()+")":""; 

        } 

       } 
       dp.addItem(obj); 
      } 

for(i=0;i<maxPages;i++) 
      { 
       var printPDFItemrenderer:ClassFactory = new ClassFactory(PrintPDFCheckboxComponent) 
       printPDFItemrenderer.properties = {onClick: printpdfchkid_clickHandler}; 
       var grid:DataGridColumn = new DataGridColumn(); 
       grid.itemRenderer = printPDFItemrenderer; 
       grid.headerText = pageName[i]; 
       grid.width = 150; 
       grid.minWidth = 150; 
       grid.dataField = "page" + (i+1); 
       if(recordCount<(xml..item.(pageOrder==(i+1))).length()) 
        recordCount = (xml..item.(pageOrder==(i+1))).length() 
       col.push(grid); 
      } 
      printpdfdg.columns = col; 


<mx:DataGrid id="printpdfdg" width="100%" height="380" 
        textAlign="center" dataProvider="{dp}" sortableColumns="false" horizontalScrollPolicy="off" verticalScrollPolicy="auto" rowHeight="40" horizontalCenter="0" variableRowHeight="false"> 
     </mx:DataGrid> 

在itemRenderer的MXML文件

<mx:checkBox id="printpdfchkid" label="{data[DataGridListData(listData).dataField]}" 
      selected="{data.data[DataGridListData(listData).dataField]}" labelPlacement="right" labelVerticalOffset="0" 
      click="onClick(event)" /> 

因此,任何人能發現我在做什麼錯

回答

0

的項目渲染器可循環使用。因此當您滾動不再可見的行的渲染器將被重新用於現在可見的新行。 解決方案是覆蓋set data屬性並在其中設置複選框狀態。所以當渲染器被重用時,渲染器數據設置器被用來分配它必須表示的新數據,在這裏你可以做適當的設置。綁定也應該起作用。您應該在Flex中回收呈現器回收。 你也應該添加更多的信息在你的問題中,比如你使用的確切DataGrid(mx,spark或advanced)

2

我也有同樣的經歷。要解決這個問題,請在對象中添加布爾屬性,然後嘗試按照項目渲染器中給定的代碼進行操作。

private var _obj:Object; 

public function get obj():Object 
     { 
      return _obj; 
     } 

     public function set obj(value:Object):void 
     { 
      _obj = value; 
     } 
override public function set data(value:Object) : void 
     { 
      this.itemCheckBox.label = value.Name; 
      this.itemCheckBox.selected = value.isSelected; 
      obj = value; 


     } 
//check box change event handler 
protected function itemCheckBox_changeHandler(event:Event):void 
     { 
      obj.isSelected = itemCheckBox.selected; 
     } 
相關問題