在Flex 4中格式化Datagrid的行

时间:2011-08-29 10:24:49

标签: flex datagrid flex4 itemrenderer

我在datagrid的一列中使用了以下itemrenderer。但是,我想以不同方式格式化datagrid的每一行。该列由数字组成,但有些需要格式化为Numbers,而其他则为货币等。另请注意,我有一个由0和1组成的附加列,其中0表示它应格式化为数字,1表示它应该是格式化为货币。

<?xml version="1.0" encoding="utf-8"?>
<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">

    <s:Label id="lblData" top="0" left="0" textAlign="center" verticalAlign="middle" right="0" bottom="0" text="{dataGridListData.label}"  backgroundColor="#EDFB09"/>

    <s:Rect left="0" right="0" top="0" bottom="0">
        <s:stroke>
            <s:SolidColorStroke color="0x000000" weight="1"/>
        </s:stroke>
    </s:Rect>

    <fx:Script>
        <![CDATA[

        ]]>
    </fx:Script>

</s:MXDataGridItemRenderer>

关于我如何实现这样一个函数的任何帮助,我试图在itemrenderer的函数中使用dataGridListData.label,但是它给出了错误。

帮助谢谢

2 个答案:

答案 0 :(得分:0)

dataGridListData对象应该已经包含了您需要的所有信息: columnIndex,rowIndex,dataField。

在简单的情况下,使用“elvis-operator”(?作为if语句的简写)非常方便:

(条件)? true-block:else-block

一些例子: color =“{(dataGridListData.rowIndex%2 == 0)?#00ff00:#0000ff}”(对于交替的行颜色) text =“{(dataGridListData.dataField ==”coolField“)?''Coool!':'Uncool'}”

答案 1 :(得分:0)

可以通过实现IDataRenderer,IDropInListItemRenderer来创建自定义渲染器。

ManageFilterValueEditor extends VBox implements IDataRenderer, IDropInListItemRenderer

这样可以访问_listdata和_data。列表数据表示行。在setData中,我们可以以

的形式访问该行
override public function set data(value:Object):void {
            _data = value;
            if(_listData!=null){
                     var col:DataGridColumn=((_listData.owner as DataGrid).columns[_listData.columnIndex] as DataGridColumn);
                    removeAllChildren();

//取决于列,可以适当格式化