2012-02-19 92 views
0

我的DataGrid中有一个itemRenderer,它将根据我的XML中大约8个不同节点的值显示彩色框(如彩色键)。我“以为”我想出了解决方案,当你第一次启动应用程序时,应该显示的彩色框和不显示的彩色框不会。但是当你滚动dataGrid时,它们都会改变。我已经尝试了几种不同的方式,一个自定义的MXML组件,一个动作脚本,两个,你都命名它,它总是做同样的事情。有人可以看看这段代码,让我知道我在做什么?DataGrid中的itemRenderer

MXML:

<mx:DataGrid width="100%" height="100%" dataProvider="{gridData}" 
      horizontalGridLines="true" horizontalGridLineColor="#666666"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Publication title" dataField="pubTitle" showDataTips="true" dataTipField="dateEssentials"/> 
     <mx:DataGridColumn headerText="Primary function" dataField="functionPrimary" width="150"/> 
     <mx:DataGridColumn headerText="Lead writer" dataField="writerLead" width="150"/> 
     <mx:DataGridColumn headerText="Primary channel" dataField="primaryChannel" width="150"/> 
     <mx:DataGridColumn headerText="Primary date" dataField="primaryDate" width="100" 
          labelFunction="dgDateFormatter" sortCompareFunction="dgDateSorter"/> 
     <mx:DataGridColumn dataField="dateEssentials" itemRenderer="scripts.DGImageRenderer" 
          width="150" resizable="false"/> 
    </mx:columns> 
</mx:DataGrid> 

渲染:

import mx.events.FlexEvent; 
     override public function set data(value:Object):void { 
      if (value != null) { 
       super.data = value; 
       trace(data.pubTitle); 
       if (data.dateEyhpNews != null){ 
        EyhpNews.visible = true; 
        trace("EYHP NEWS = " + data.dateEyhpNews); 
       } 
       if (data.dateEyhpSpotlight != null){ 
        EyhpSpotlight.visible = true; 
        trace("EYHP SPOTLIGHT = " + data.dateEyhpSpotlight); 
       } 
       if (data.dateGsChs != null){ 
        gsChs.visible = true; 
        trace("GS CHS = " + data.dateGsChs); 
       } 
       if (data.dateItsCHS != null){ 
        itsChs.visible = true; 
        trace("ITS CHS = " + data.dateItsCHS); 
       } 
       if (data.dateProcChs != null){ 
        procChs.visible = true; 
        trace("PROC CHS = " + data.dateProcChs); 
       } 
       if (data.dateEssentials != null){ 
        essentials.visible = true; 
        trace("ESSENTIALS = " + data.dateEssentials); 
       } 
       if (data.dateEmail != null){ 
        email.visible = true; 
        trace("EMAIL = " + data.dateEmail); 
       } 
       if (data.dateOther1 != null){ 
        other1.visible = true; 
        trace("OTHER 1 = " + data.dateOther1); 
       } 
       if (data.dateOther2 != null){ 
        other2.visible = true; 
        trace("OTHER 2 = " + data.pubTitle); 
       } 
       if (data.dateOther3 != null){ 
        other3.visible = true; 
        trace("OTHER 3 = " + data.pubTitle); 
       } 
       trace(data.pubTitle); 
      } 
      dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE)); 
     } 

<s:HGroup width="100%" height="100%" verticalAlign="middle" paddingLeft="5" paddingRight="5" > 
    <mx:Box id="EyhpNews" visible="false" backgroundColor="0x0000FF" width="8" height="8" toolTip="EYHP News" /> 
    <mx:Box id="EyhpSpotlight" visible="false" backgroundColor="0xCC3300" width="8" height="8" toolTip="EYHP Spotlight" /> 
    <mx:Box id="gsChs" visible="false" backgroundColor="0x006699" width="8" height="8" toolTip="Global Services CHS" /> 
    <mx:Box id="itsChs" visible="false" backgroundColor="0xCC6600" width="8" height="8" toolTip="IT Services CHS" /> 
    <mx:Box id="procChs" visible="false" backgroundColor="0x993399" width="8" height="8" toolTip="Procurement CHS" /> 
    <mx:Box id="essentials" visible="false" backgroundColor="0x009933" width="8" height="8" toolTip="Essentials" /> 
    <mx:Box id="email" visible="false" backgroundColor="0xFF6666" width="8" height="8" toolTip="Email" /> 
    <mx:Box id="other1" visible="false" backgroundColor="0xFF6666" width="8" height="8" toolTip="Other 1" /> 
    <mx:Box id="other2" visible="false" backgroundColor="0xFF6666" width="8" height="8" toolTip="Other 2" /> 
    <mx:Box id="other3" visible="false" backgroundColor="0xFF6666" width="8" height="8" toolTip="Other 3" /> 
</s:HGroup> 

回答

1

我认为当你滚动数据网格可能是reusing项目渲染器。当它改变了项目渲染器的数据值时,它已经有一些可见的框,并且你可以看到其他新框。所以你应该做的是确保旧箱子不再可见。

你可以这样做,例如:

EyhpNews.visible = data.dateEyhpNews != null; 
EyhpSpotlight.visible = data.dateEyhpSpotlight != null; 
// ... 
+0

伟大的工作SCH!这样做并且清理了一些代码。非常感谢! – 2012-02-19 20:58:36

相关问题