2013-02-20 6 views
5

こんにちは私はAdobe Flexを初めて使用しています。とにかくここにある。 私は基本的に2つの条件をチェックする簡単なDataGridを試しています 1)アーティストが01でアルバムが 'アルバム01'の場合、背景を 'Year'列の対応するセルに設定します。Flexの複数の条件に基づいてデータグリッドセルの背景色を変更する

私の下のコードでは、プロパティが動作していないが、フォントの色を変更しているので、バックグラウンドカラーにスタイルを設定すると第二に、上記のネストされた条件を取得するコードを書く方法がわからないですか?誰かがこの面で私を助けることができたら、本当に感謝しています。 ありがとうございました!あらかじめ。以下は

はコードです: Newdatagrid.mxml

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 

      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"   minHeight="600" > 
<fx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.controls.Alert; 
     [Bindable] 
     public static var initDG:ArrayCollection = new ArrayCollection([ 
      {Artist:'01', Album:'Album 01', Year:'2008'}, 
      {Artist:'01', Album:'Album 02', Year:'2009'}, 
      {Artist:'03', Album:'Album 03', Year:'2007'}, 
      {Artist:'03', Album:'Album 04', Year:'2003'}, 

     ]); 

    ]]> 

</fx:Script> 


<s:VGroup> 
    <s:DataGrid id="myGrid" width="360" dataProvider="{initDG}"> 
     <s:columns> 
      <s:ArrayList> 
       <s:GridColumn dataField="Artist" headerText="Artist" itemRenderer="CellRenderer"/> 
       <s:GridColumn dataField="Album" headerText="Album" itemRenderer="CellRenderer"/> 
       <s:GridColumn dataField="Year" headerText="Year" itemRenderer="CellRenderer"/> 
      </s:ArrayList> 
     </s:columns>  
    </s:DataGrid> 
</s:VGroup> 
</s:Application> 

レンダラ:

<?xml version="1.0" encoding="utf-8"?> 
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
        implements="mx.controls.listClasses.IDropInListItemRenderer"> 
<fx:Script> 
    <![CDATA[ 
     import mx.controls.dataGridClasses.DataGridListData; 
     import mx.controls.listClasses.BaseListData; 
     import mx.controls.Alert; 

     private var _listData:BaseListData; 

     [Bindable]private var isSelected:Boolean = false; 

     override public function set data(value:Object) : void 
     { 
      super.data = value; 
      lblData.text = data[column.dataField]; 

      if (data[column.dataField].valueOf() >= 2008){ 
       //styleName="myStyles.BgColor"; 
       setStyle('backgroundColor',0xFFFF00); 
      }else{ 
       setStyle('backgroundColor',0x32CD32); 
      } 

     } 

     [Bindable]public function get listData() : BaseListData 
     { 
      return _listData; 
     } 
     public function set listData(value:BaseListData) : void 
     { 
      _listData = value; 
     } 

    ]]> 
</fx:Script> 
<s:Label id="lblData" top="9" left="7" width="100%" height="100%" textAlign="center"/> 

</s:GridItemRenderer> 

マイ所望の出力:条件:もしアーティスト= 01と年変化の年> = 2008その後、セルの背景to Red

+0

http://stackoverflow.com/questions/748213/setting-background-color-for-datagrid-row-in-adobe-flex:

例は次のようなものになるだろうこのリンク。 – Triode

+0

Rajeshさん、ありがとうございます。しかし、私はコード全体を取得することができず、ソースコードリンクにはサイトの有効期限が切れていると言われています。 –

答えて

7

GridItemRendererクラスには、このようなスタイルbackgroundColorはありません。 それはそれを設定する効果がありません。

あなたができることは、ItemRendererにRectを追加して、条件に応じてcolorプロパティを設定することです。参照してください

<?xml version="1.0" encoding="utf-8"?> 
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true"> 

    <fx:Script> 
     <![CDATA[ 
      override public function prepare(hasBeenRecycled:Boolean):void { 


       if(this.data) { 

        if(this.data.Year >= 2008 && this.data.Artist == '01' && column.dataField == 'Year') 
         bgColor.color = 0xFF0000; 
        else 
         bgColor.color = 0xFFFFFF; 
       } 
      } 
     ]]> 
    </fx:Script> 

    <s:Rect top="0" bottom="0" left="0" right="0"> 
     <s:fill> 
      <s:SolidColor id="bgColor" color="0xFFFFFF"/> 
     </s:fill> 
    </s:Rect> 
    <s:Label id="labelDisplay" top="9" left="7"/> 

</s:GridItemRenderer> 
+0

あなたの迅速な対応のためにmichPoohに感謝します。あなたのコードは行全体を強調表示しますが、「年」列の条件に一致するセルのみをハイライトする必要があります。私の希望する出力:条件:たとえばArtist = 01およびYear> = 2008の場合、対応するセルBackground of赤への年の変更、この例では2008年だけです。 –

+0

のように条件を変更するだけです。もし(this.data.Year> = 2008 && this.data.Artist == '01' && column.dataField == '年') \t \t \t \t \t \t bgColor.color =は0xFF0000;他 \t \t \t \t \t \t \t \t \t \t \t bgColor.color = 0xFFFFFFの。 – michaPau

+0

うわー!男は大変感謝しています!私はこの問題のために多くの苦しんでいる!あなたは私の一日を作った。再度、感謝します! –

1
<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 

       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"   minHeight="600" > 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.controls.Alert; 
      [Bindable] 
      public static var initDG:ArrayCollection = new ArrayCollection([ 
       {Artist:'01', Album:'Album 01', Year:'2008'}, 
       {Artist:'01', Album:'Album 02', Year:'2009'}, 
       {Artist:'03', Album:'Album 03', Year:'2007'}, 
       {Artist:'03', Album:'Album 04', Year:'2003'}, 

      ]); 

     ]]> 

    </fx:Script> 


    <s:VGroup> 
     <s:DataGrid id="myGrid" width="360" dataProvider="{initDG}"> 
      <s:columns> 
       <s:ArrayList> 
        <s:GridColumn dataField="Artist" headerText="Artist"/> 
        <s:GridColumn dataField="Album" headerText="Album"/> 
        <s:GridColumn dataField="Year" headerText="Year" itemRenderer="CellRenderer"/> 
       </s:ArrayList> 
      </s:columns>  
     </s:DataGrid> 
    </s:VGroup> 
</s:WindowedApplication> 

----------------------------CellRenderer.mxml------------------------ 

    <?xml version="1.0" encoding="utf-8"?> 
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true"> 

    <fx:Script> 
     <![CDATA[ 
      override public function prepare(hasBeenRecycled:Boolean):void { 
       lblData.text = data[column.dataField] 
       if(this.data) { 
        lblData.text = data[column.dataField]; 

        if(this.data.Year >= 2008&&this.data.Artist==01) 
         bgColor.color = 0xFF0000; 
        else 
         bgColor.color = 0xFFFFFF; 
       } 
      } 
     ]]> 
    </fx:Script> 

    <s:Rect top="0" bottom="0" left="0" right="0"> 
     <s:fill> 
      <s:SolidColor id="bgColor" color="0xFFFFFF"/> 
     </s:fill> 
    </s:Rect> 
    <s:Label id="lblData" top="9" left="7" width="100%" height="100%" textAlign="center"/> 

</s:GridItemRenderer> 
+0

ありがとう!この解決策もあまりにも良かった! –

+0

ありがとう!私はDataGridのsparkコンポーネントを使用していたので、私は、public function prepare(hasBeenRecycled:Boolean):voidを使って、データグリッドをスクロールするときにデータが正しくなくなるのを止めました。 –

+0

アイテムレンダラーは、通貨フォーマットの関数を呼び出すSpark Datagridカラムで定義されたLabel関数をオーバーライドします。したがって、カラムには通貨または数値フォーマットが表示されません。あなたはこれに対する解決策を提供できますか?前もって感謝します。 –

関連する問題