2011-03-07 21 views
0

我有其中的labelFunction定义一个的DataGridColumn:的Flex的DataGridColumn的labelFunction产生额外的参数

private function myLabelFunction(item:Object, column:DataGridColumn):String 
{ 
    var returnVal:String; 
    var nm:NumericFormatter; 
    nm.decimalSeparatorTo = "."; 
    nm.precision = additionalParameter; 

    returnVal = nmTwoDecimals.format(item[column.dataField]); 

    if (returnVal == '0.00') 
    { 
    returnVal = ''; 
    } 

    return returnVal; 
} 

是否有可能增加一个额外的参数,这样我就可以通过为格式化我打算使用属性值?

例如像:

private function myLabelFunction(item:Object, column:DataGridColumn, precisionParam:int):String 
    { 
     var returnVal:String; 
     var nm:NumericFormatter; 
     nm.decimalSeparatorTo = "."; 
     nm.precision = precisionParam; 

     returnVal = nmTwoDecimals.format(item[column.dataField]); 

     if (returnVal == '0.00') 
     { 
     returnVal = ''; 
     } 

     return returnVal; 
    } 

感谢。

回答

2

您将不得不扩展DataGridColumn类。创建新类后简单地覆盖现有的itemToLabel功能:

public function itemToLabel(data:Object):String 
{ 
     if (!data) 
      return " "; 

     if (labelFunction != null) 
      return labelFunction(data, this); 

     if (owner.labelFunction != null) 
      return owner.labelFunction(data, this); 

     if (typeof(data) == "object" || typeof(data) == "xml") 
     { 
      try 
      { 
       if (!hasComplexFieldName) 
       data = data[dataField]; 
       else 
        data = deriveComplexColumnData(data); 
      } 
      catch(e:Error) 
      { 
       data = null; 
      } 
     } 

     if (data is String) 
      return String(data); 

     try 
     { 
      return data.toString(); 
     } 
     catch(e:Error) 
     { 
     } 

     return " "; 
    } 

线的回归的labelFunction(数据,本);“是什么调用labelFunction(也将检查所有者datagrid的labelfunction)。 'itemToLabel'中的'data'是你的对象。您可以在对象中包含所需的精度值,也可以将其硬编码到扩展类(或注入,或单例,类var,无论您喜欢什么)中。

此时您可以继续并将其作为第三个参数传递给您的新标签功能。

0

这会工作:

<DataGridColumn labelFunction="{function(item:Object, column:DataGridColumn):String { return anotherLabelFunction(item,column,2) }}" /> 

// Elsewhere ... 
function anotherLabelFunction(item:Object,column:DataGridColumn,precision:int):String 
{ 
    // Do your business 
} 
0

在为DataGrid列的标签功能,您可以通过使用dataField属性访问指定的数据字段,请参见下面的语法如下:

“假设你标签功能被称为formatNumbers_LabelFunction”

private function formatNumbers_LabelFunction(item:Object, column:DataGridColumn):String{ 

    //Write any code logic you want to apply on your data field ;) 
    //In this example, I'm using a number formatter to edit numbers 

    return myCustomNumberFormatter.format(item[column.dataField]); 
} 

这种方式,你可以使用一个通用的标签功能来处理你的显示大一些统一行动TA

除此之外,您还可以访问到的数据提供者仅通过调用它的名字任何这样的数据字段:

item.YourFieldName 

,其中产品在冷杉参数的类别[对象]您的标签功能方法