2012-02-19 2 views
0

У меня есть itemRenderer в моем DataGrid, который будет отображать цветные символы (например, цветные клавиши) в зависимости от значения около 8 разных узлов в моем XML. Я «подумал», что придумал решение, когда вы впервые запустили приложение с цветными ящиками, которые должны отображаться, а те, которые нет, не надо. Но когда вы прокручиваете dataGrid, все они меняются. Я пробовал это несколько различных способов, пользовательский компонент MXML, сценарий действий, оба, вы называете это, и он всегда делает то же самое. Может ли кто-нибудь ПОЖАЛУЙСТА посмотреть на этот код и сообщить мне, что я делаю wronng?itemRenderer в 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> 

Renderer:

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

Большой СХ работу! Это сделало это и немного очистило код. Спасибо огромное! –

Смежные вопросы