0

labelFunction が定義されている datagridcolumn があります。

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;
    }

ありがとう。

4

3 に答える 3

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 " ";
    }

行'returnlabelFunction(data、this);' labelFunctionを呼び出すものです(labelfunctionの所有者データグリッドもチェックします)。'itemToLabel'の'data'がオブジェクトです。必要な精度値をオブジェクトに含めるか、拡張クラスにハードコーディングすることができます(または、任意のクラスvarを挿入またはシングルトンします)。

この時点で、先に進んで、それを3番目のパラメーターとして新しいlabelFunctionに渡すことができます。

于 2011-03-08T00:53:47.313 に答える
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
}
于 2011-03-08T00:59:22.447 に答える
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]);
}

このようにして、一般的なラベル関数を使用して、表示されたデータに対するいくつかの統一された操作を処理できます。

それに加えて、次のように名前を呼び出すだけで、データ プロバイダーにある任意のデータ フィールドにアクセスすることもできます。

item.YourFieldName

item は、ラベル関数メソッドの最初のパラメーター [オブジェクト型] です。

于 2013-01-06T07:58:47.090 に答える