【问题标题】:Flex Spark datagrid - disable selection of a rowFlex Spark datagrid - 禁用选择行
【发布时间】:2011-09-16 16:37:45
【问题描述】:

我想禁用(并且看起来已禁用)火花数据网格中的某些行。我找到了停止选择的答案,这很棒 In flex, is there a way to capture and optionally cancel a row selection event in a DataGrid?

但我还想表明特定行是不可选择的。理想情况下,我想要某种覆盖,但我不确定这是否可能。我的替代解决方案是将不可选择行的文本颜色更改为灰色。查看数据网格呈现它们似乎都是基于列的。我查看了可能的蒙皮(覆盖交替颜色属性),但这只是设置背景属性而不是文本颜色。这可能吗?

谢谢

【问题讨论】:

  • 您可以通过创建 itemRenderer 类轻松完成这项工作
  • 究竟如何?我认为这些是基于列的?
  • 它们是基于列的,但您可以将渲染器应用于每一列。您可以使用相同的渲染器。
  • 是的,您可以每列有一个,但认为您的单元格数据可以设置哪个单元格具有禁用状态。

标签: apache-flex datagrid flex4


【解决方案1】:

最基本的解决方案是使用您提到的自定义渲染器和选择阻止逻辑:

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;

}
}

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 2012-12-23
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多