Apache flex Flex Spark datagrid-禁用行选择

Apache flex Flex Spark datagrid-禁用行选择,apache-flex,datagrid,flex4,Apache Flex,Datagrid,Flex4,我想禁用(并看起来禁用)spark数据网格中的某些行。我找到了停止选择的答案,这很好 但是我还想说明,特定的行是不可选择的。理想情况下,我希望有某种覆盖,但我不确定这是否可行。我的替代解决方案是将不可选择行的文本颜色更改为灰色。查看datagrid呈现,它们似乎都是基于列的。我研究了可能的蒙皮(覆盖交替颜色属性),但这只是设置背景属性,而不是文本颜色。这可能吗 谢谢最基本的解决方案是使用您提到的自定义渲染器和防止选择的逻辑: DataGridRowDisableding.mxml <s:

我想禁用(并看起来禁用)spark数据网格中的某些行。我找到了停止选择的答案,这很好

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


谢谢

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

DataGridRowDisableding.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>
<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>

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

DataGridRowDisableding.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>
<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>

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