2

我正在使用 Halo AdvancedDataGrid 组件,其中每列的默认 itemEditor 是 mx.controls.TextInput。

例如,数据提供者是: [CODE][Bindable] private var labelsGridArray:Array = [ { tag:"apple" }, { tag:"*banana" }, { tag:"carrot" } ];[/CODE ] 而 AdvancedDataGrid 的定义是:[CODE][/CODE]

如果 dataprovider 数组中的字符串前面有一个星号(如本示例中的香蕉的情况),则该字符串需要用方括号括起来并以灰色显示。

我尝试执行以下操作:[CODE]

一位同事告诉我有关使用 AdvancedDataGridColumn 的 labelFunction 属性的信息。我试过了,但无法执行以下分配(列的 id 是'tag'): [CODE]tag.itemEditor.htmlText = formattedText;[/CODE]

我收到错误“通过静态类型 mx.core:IFactory 的引用访问可能未定义的属性 htmlText。

我尝试同时显式提取 TextInput itemEditor(就像我为覆盖集数据所做的那样)并使用 labelFunction,但我无法让两者都在正确的范围内。

非常感谢您的帮助,邦妮

4

1 回答 1

2

尝试创建自己的 itemRenderer / itemEditor。

这将是您的数据网格:

<fx:Script>
    <![CDATA[
        [Bindable] private var labelsGridArray:Array = [ { tag:"apple" }, { tag:"*banana" }, { tag:"carrot" } ];
    ]]>
</fx:Script>
<mx:DataGrid dataProvider="{labelsGridArray}" >
    <mx:columns>
        <mx:DataGridColumn headerText="Name" itemRenderer="NameItemRenderer"/>
    </mx:columns>
</mx:DataGrid>

这将是您的 itemRenderer/editor (NameItemRenderer.mxml)

<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                      xmlns:s="library://ns.adobe.com/flex/spark" 
                      xmlns:mx="library://ns.adobe.com/flex/mx" 
                      focusEnabled="true">
<fx:Script>
    <![CDATA[

        override public function set data(value:Object):void{
            super.data = value;
            if(value.tag.indexOf("*")!= -1){
                lblData.text = "[" + value.tag + "]";
                lblData.setStyle("color",0xFF0000);
            }
            else{
                lblData.text = "" + value.tag ;
                lblData.setStyle("color",0x000000);
            }
        }
    ]]>
</fx:Script>
<s:Label id="lblData" top="0" left="0" right="0" bottom="0"/>

我为此使用了普通的 mx:Datagrid 和 spark MXDataGridItemRenderer,但它的工作方式与 AdvancedDataGrid 相同。您需要做的就是覆盖 set data()

干杯

于 2011-05-19T19:37:31.857 回答