Flex Spark datagrid - отключить выбор строки - PullRequest
0 голосов
/ 16 сентября 2011

Я хочу отключить (и выглядеть отключенным) некоторые строки в сетке данных искры. Я нашел этот ответ, чтобы остановить выбор, который отлично В flex есть способ перехватить и при желании отменить событие выбора строки в DataGrid?

Но я хочу дополнительно показать, что конкретная строка недоступна для выбора. В идеале я хочу иметь какое-то наложение, но я не уверен, возможно ли это. Мое альтернативное решение состоит в том, чтобы изменить цвет текста на серый для невыбираемой строки. Глядя на рендеринг сетки данных, они кажутся основанными на столбцах. Я рассмотрел скины потенциально (переопределяя свойство чередующегося цвета), но это просто устанавливает свойство фона, а не цвет текста. Возможно ли это?

Спасибо

1 Ответ

3 голосов
/ 16 сентября 2011

Самое простое решение - использовать пользовательский рендер и логику предотвращения выбора, о которой вы упомянули:

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;

}
}
...