2009-02-18 3 views
1

У меня есть следующий класс, который расширяет AdvancedDataGridItemRenderer:Flex AdvancedDataGridItemRenderer BackgroundColor/TextColor не оказывающего

package 
{ 
    import mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer; 

    public class TestADGIR extends AdvancedDataGridItemRenderer 
    { 
      public function TestADGIR() 
      { 
        super(); 
        backgroundColor = 0; // black 
        textColor = 0xFFFFFF //16777215; // white 
      } 
    } 
} 

Как вы можете видеть, BackgroundColor получает значение черного и TextColor получает набор белый в конструкторе. У меня есть AdvancedDataGrid, который использует TestADGIR для одного из столбцов. Но когда отображается сетка, этот столбец отображается с черным текстом на белом фоне - прямо противоположным тому, что задается в конструкторе. Может ли кто-нибудь помочь мне понять, что я делаю неправильно? Вот код ADG:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" preinitialize="preInitApp()"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.collections.HierarchicalCollectionView; 
      import mx.collections.HierarchicalCollectionViewCursor; 

      [Bindable] 
      private var dpFlat:ArrayCollection = new ArrayCollection([ 
       {Region:"North", DisplayOrder: 2, Territory:"North1", Territory_Rep:"North1_Rep", ParticipantDisplayOrder: 1, Actual:38865, Estimate:40000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North2", Territory_Rep:"North2_Rep", ParticipantDisplayOrder: 2, Actual:29885, Estimate:30000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North3", Territory_Rep:"North3_Rep", ParticipantDisplayOrder: 3, Actual:29134, Estimate:30000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North4", Territory_Rep:"North4_Rep", ParticipantDisplayOrder: 4, Actual:52888, Estimate:45000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North5", Territory_Rep:"North5_Rep", ParticipantDisplayOrder: 5, Actual:38805, Estimate:40000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North6", Territory_Rep:"North6_Rep", ParticipantDisplayOrder: 6, Actual:55498, Estimate:40000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North6", Territory_Rep:"North6_Rep", ParticipantDisplayOrder: 7, Actual:44985, Estimate:45000}, 
       {Region:"North", DisplayOrder: 2, Territory:"North8", Territory_Rep:"North8_Rep", ParticipantDisplayOrder: 8, Actual:44913, Estimate:45000}, 

       {Region:"South", DisplayOrder: 1, Territory:"South1", Territory_Rep:"South1_Rep", ParticipantDisplayOrder: 1, Actual:38865, Estimate:40000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South2", Territory_Rep:"South2_Rep", ParticipantDisplayOrder: 2, ParticipantDisplayOrder: 2, Actual:29885, Estimate:30000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South3", Territory_Rep:"South3_Rep", ParticipantDisplayOrder: 3, Actual:29134, Estimate:30000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South4", Territory_Rep:"South4_Rep", ParticipantDisplayOrder: 4, Actual:52888, Estimate:45000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South5", Territory_Rep:"South5_Rep", ParticipantDisplayOrder: 5, Actual:38805, Estimate:40000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South6", Territory_Rep:"South6_Rep", ParticipantDisplayOrder: 6, Actual:55498, Estimate:40000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South7", Territory_Rep:"South7_Rep", ParticipantDisplayOrder: 7, Actual:44985, Estimate:45000}, 
       {Region:"South", DisplayOrder: 1, Territory:"South8", Territory_Rep:"South8_Rep", ParticipantDisplayOrder: 8, Actual:44913, Estimate:45000}]); 

      [Bindable] 
      private var itemRendererFactory:ClassFactory = null; 

      private function preInitApp():void 
      { 
       itemRendererFactory = new ClassFactory(TestADGIR); 
       //itemRendererFactory.properties = {backgroundColor: 0, textColor: 16777215 }; 
      } 

      private function sortByDisplayOrder(groupA:Object, groupB:Object, fields:Array = null):int 
      { 
        if (groupA.Region == groupB.Region) // if we are comparing two records from the same subgroup, then sort the participants 
        { 
         if (groupA.ParticipantDisplayOrder > groupB.ParticipantDisplayOrder) 
         { 
          return 1; 
         } 
         else if (groupA.ParticipantDisplayOrder == groupB.ParticipantDisplayOrder) 
         { 
          return 0; 
         } 
         else 
         { 
          return -1; 
         } 
        } 

        if (groupA.DisplayOrder > groupB.DisplayOrder) // sort the subgroups 
       { 
        return 1; 
       } 
       else if (groupA.DisplayOrder == groupB.DisplayOrder) 
       { 
        return 0; 
       } 
       else 
       { 
        return -1; 
       } 
      }    

     ]]> 
    </mx:Script> 

    <mx:VBox width="100%" height="100%"> 
     <mx:Panel title="AdvancedDataGrid Control Example" 
      height="100%" width="75%" layout="horizontal" 
      paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10"> 

      <mx:AdvancedDataGrid id="myADG" 
       width="100%" height="100%" 
       initialize="gc.refresh();" 
       horizontalScrollPolicy="off" 
       displayItemsExpanded="true" 
      >   
       <mx:dataProvider> 
        <mx:GroupingCollection id="gc" source="{dpFlat}"> 
         <mx:grouping> 
          <mx:Grouping compareFunction="sortByDisplayOrder"> 
           <mx:GroupingField name="Region"/> 
          </mx:Grouping> 
         </mx:grouping> 
        </mx:GroupingCollection> 
       </mx:dataProvider>   

       <mx:columns> 
        <mx:AdvancedDataGridColumn id="regionColumn" dataField="Region" itemRenderer="{itemRendererFactory}"/> 
        <mx:AdvancedDataGridColumn id="territoryColumn" dataField="Territory"/> 
        <mx:AdvancedDataGridColumn id="territoryRepColumn" dataField="Territory_Rep" 
         headerText="Territory Rep"/> 
        <mx:AdvancedDataGridColumn id="actualColumn" dataField="Actual"/> 
        <mx:AdvancedDataGridColumn id="estimateColumn" dataField="Estimate"/> 
       </mx:columns> 

      </mx:AdvancedDataGrid>   

     </mx:Panel> 
    </mx:VBox>  
</mx:Application> 

Спасибо! Шона

ответ

4

я обнаружил, что цвет фона можно управлять путем установки фона свойства верно а затем присвоение значения backgroundColor. Цвет текста управляется путем вызова setStyle («цвет», 0xFF0000). Спасибо Эрику за то, что он указал мне в правильном направлении на стили.

+0

прохладный. рад, что я могу помочь вам, где вам нужно быть, даже я не ответил прямо на ваш вопрос! –

+0

@Sean Staats, классный, свойство фона намекнул мне! – Ryan

2

Это может быть потому, что BackgroundColor и TextColor не являются стилями AdvancedDataGridItemRenderer класса:

http://livedocs.adobe.com/flex/3/langref/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.html#styleSummary

+0

Они не могут быть стили, но они являются открытыми свойствами AdvancedDataGridItemRenderer. Я должен использовать стили вместо свойств. Я нашел «цветной» стиль, который работает так, как ожидалось. К сожалению, нет стиля backgroundColor. Любые предложения по изменению цвета фона? –

+0

Эрик, я бы назвал ваш ответ полезным, но у меня пока нет репутации 15. –

2

Для пользовательских строк цвета фона я переопределить

 
protected function drawRowBackground(s:Sprite, rowIndex:int, 
             y:Number, height:Number, color:uint, dataIndex:int):void
из ADG