2011-09-16 9 views
0

sparkデータグリッド内のいくつかの行を無効にする(無効にする)ようにします。私はこの答えが素晴らしい選択を停止することを発見しました In flex, is there a way to capture and optionally cancel a row selection event in a DataGrid?Flex Spark DataGrid - 行の選択を無効にする

しかし、私はさらに、特定の行が選択できないことを示したいと思います。理想的には、何らかのオーバーレイが必要ですが、可能かどうかはわかりません。私の代わりの解決策は、選択できない行のテキストの色を灰色に変更することです。 DataGridレンダーを見ると、それらはすべて列ベースのようです。私は潜在的に(交互の色プロパティをオーバーライドする)スキンニングを見たが、これはテキストの色ではなく背景のプロパティを設定するだけである。これは可能ですか?最も基本的な解決策は、あなたが言及したロジックを防止するカスタムレンダラと選択を使用している

おかげ

+0

あなたはどのように正確にするitemRendererクラス – papachan

+0

を作成することで簡単に作業し、これを行うことができますか?私はこれらが列ベースだと思った? – RNJ

+0

これらは列ベースですが、各列にレンダラーを適用できます。同じレンダラーを使用することができます。 –

答えて

3

DataGridRowDisabling.mxml

<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" xmlns:local="*"> 

    <fx:Script> 
    <![CDATA[ 
     import spark.events.GridSelectionEvent; 

     private function dataGrid_selectionChangingHandler(event:GridSelectionEvent):void 
     { 
      var index:int = event.selectionChange.rowIndex; 
      var product:Product = dataGrid.dataProvider.getItemAt(index) as Product; 
      if (product && !product.enabled) 
       event.preventDefault(); 
     } 

    ]]> 
    </fx:Script> 

    <s:DataGrid id="dataGrid" itemRenderer="GridItemRenderer2" selectionChanging="dataGrid_selectionChangingHandler(event)"> 
     <s:dataProvider> 
      <s:ArrayCollection> 
       <local:Product name="iPod" price="199.99"/> 
       <local:Product name="iPad 3" price="499.99"/> 
       <local:Product name="iPad 4" price="599.99" enabled="false"/> 
       <local:Product name="iPad 5" price="699.99" enabled="false"/> 
      </s:ArrayCollection> 
     </s:dataProvider> 
    </s:DataGrid> 

</s:Application> 

GridItemRenderer2.mxml

<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 (data is Product) 
       enabled = Product(data).enabled; 

      lblData.text = data[column.dataField]; 
     } 

    ]]> 
    </fx:Script> 

    <s:Label id="lblData" top="9" left="7"/> 

</s:GridItemRenderer> 

Product.asは

package 
{ 
public class Product 
{ 

    public var name:String; 

    public var price:Number; 

    public var enabled:Boolean = true; 

} 
} 
+0

が優れています。完璧に動作します。ありがとう! – RNJ

関連する問題