1

Flex 4 帮助 我需要一个 itemRenderer 来设置数据网格整行的 fontWeight 的样式,以根据该行中任何单元格的单元格内容动态加粗。因此,例如,如果我的整个数据网格中的单元格内容等于字符串“ALL”,我希望数据网格中包含该单元格的整行为“粗体”。注意:这不是 XML 数据。

Render

protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth,unscaledHeight);
            if (data.toString() == "ALL"){
                setStyle("fontWeight","bold");
            }else{
                setStyle("fontWeight","normal");
            }

        }

MXML Code
<mx:VBox width="100%" id="statsGridBox"   height="40%" >
<mx:DataGrid id="statsGrid" width="100%" height="100%" itemRenderer="com.jpmc.ctrbs.dashboard.alarms.renderers.FontWeightRowRender"/>
</mx:VBox>
4

3 回答 3

2

首先,如果您希望仅在单元格级别突出显示,请将您的代码放在 itemrender“FontWeightRowRender”中。

在您的渲染器中,您可以执行以下操作:

            override public function set data(value:Object):void {              
            super.data = value;

            if (String(value) == "ALL") {
                boldText.visible = true;
                normalText.visible = false;                 
            } else {
                boldText.visible = false;
                normalText.visible = true;
            }
        }

<s:Group>       
    <s:Label id="boldText" text="{label}" width="100%" fontWeight="bold"/>
    <s:Label id="normalText" text="{label}" width="100%" fontWeight="normal"/>
</s:Group>  

更新:突出显示一行的示例

            override public function set data(value:Object):void {              
            super.data = value;
                            if (!value) return;             

            if (MyValueObject(value).isBoldRow()) {
                boldText.visible = true;
                normalText.visible = false;                 
            } else {
                boldText.visible = false;
                normalText.visible = true;
            }
        }

MyValueObject.as

     public function isBoldRow():Boolean {
          if ((this.attrib1 == "ALL") || (this.attrib7 === "ALL"))
           return true;
           return false; 
      }
于 2013-10-08T14:20:59.753 回答
1

你应该把你的 setStyle 代码放在你的单元格渲染器的 [overriden] set data 方法中。然后在数据更改时设置样式,而不是在重绘渲染器时设置(在数据更改时可能不会发生,正如您所经历的那样)。

在渲染器中:

override public function set data(value:Object):void
{
    super.data = value;
    if (data && data.toString()=="ALL")
        setStyle("fontWeight","bold");
    else
        setStyle("fontWeight","normal");
}
于 2013-10-07T22:53:13.013 回答
0

StephenNYC 的回答有效,但最后我认为我所处的情况更容易使用 mx:AdvancedDataGrid 并应用 styleFunction="myStyleFunc" 来更改 fontWeight。

MXML

<mx:AdvancedDataGrid id="statsGrid" width="100%" height="100%" styleFunction="myStyleFunc" />

脚本

<fx:Script>
<![CDATA[
private function myStyleFunc(data:Object,col:AdvancedDataGridColumn):Object {
                if(data) {
                    for( var propertyName : * in data){
                        if (data[propertyName] == "ALL") { 
                            return {fontWeight:"bold"}; 
                        }
                    }
                }
                return {fontWeight:"normal"};      
            }
        ]]>
    </fx:Script>
于 2013-10-09T15:09:25.127 回答