2011-09-16 50 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