2012-02-19 8 views
0

DataGridにitemRendererがあり、これはXMLの8つの異なるノードの値に応じてcolorBoxなどの色付きボックスを表示します。私は "あなたが最初にアプリケーションを起動するときに解決策を思いついたと思っています。しかし、dataGridをスクロールすると、それらはすべて変更されます。私はいくつかの異なる方法、カスタムMXMLコンポーネント、アクションスクリプト、両方を試してみました。名前をつけて、それは常に同じことをします。誰かがこのコードを見て、私が何をやっているのか教えてもらえますか?itemRenderer in DataGrid

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を!それはそれをして、コードも少しきれいにしました。どうもありがとうございます! –

関連する問題