2012-05-04 4 views
2

Я пытаюсь отформатировать некоторые цифры в столбце DataGrid. Я получаю ошибку в моей упрощенной тестовой программе ниже, когда я ее запускаю. Все примеры, которые я видел до сих пор, имеют данные столбцов, которые являются строками. Есть ли способ сделать это с помощью чисел? Как изменить код ниже, чтобы отформатировать значения checking?Flex: форматирование столбцов DataGrid чисел

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"> 

<fx:Script> 
    <![CDATA[  
     [Bindable] 
     public var checking:Array = new Array(1000000.2222, 0, 1000); 

     private function myLabelFunction(item:Array, column:DataGridColumn):String {  
       var result:String; 
       result = myFormatter.format(item); 
       return result; 
     } 
    ]]> 
</fx:Script> 

<fx:Declarations> 
    <s:NumberFormatter id="myFormatter" 
         fractionalDigits="2" 
         decimalSeparator="." 
         groupingSeparator="," 
         useGrouping="true" 
         negativeNumberFormat="0" 
         /> 
</fx:Declarations> 

<mx:DataGrid id="dg1" dataProvider="{checking}" > 

    <mx:columns> 
     <mx:DataGridColumn dataField="checking" headerText="Checking" 
          labelFunction="myLabelFunction" /> 
    </mx:columns> 

</mx:DataGrid> 

</mx:Application> 

ответ

2
  1. Изменить функцию фильтра подписи (item должна быть Object)

    private function myLabelFunction(item:Object, column:DataGridColumn):String

  2. Удалить dataField="checking" из колонки.
+0

Да, он работает в настоящее время. Спасибо! – ggkmath

1

Хотя функция метки, безусловно, будет работать - я обычно предпочитаю ItemRenderer для таких вещей. Вы переопределяете функцию рендеринга, а затем можете отображать все, что угодно, в окне «Вид сетки», как вам нравится.

Приличный пример: here. Прокрутите вниз примерно на 1/4 пути вниз для примера DataGrid.

+0

Приятно знать, спасибо. Если у меня есть ItemRenderer уже (не показан) по другим причинам, могу ли я просто добавить для него форматирование, так что мне не нужно писать другой ItemRenderer? Что мне нужно изменить/добавить? – ggkmath

+0

В этом примере используется встроенный рендеринг элемента, который напрямую привязан к столбцам, в которые они «встроены». Вы можете использовать внешний рендеринг элементов (как правило, в собственном файле сценария) и привязать его к как можно большему количеству столбцов. Вы просто пишете функции для правильного управления данными. Вы получаете объект данных только с помощью средства визуализации элементов, поэтому выяснение того, что делать, может быть сложным. – debracey

+0

Я предполагаю, что мой вопрос заключался в том, какой контроль я бы использовал в ItemRenderer для форматирования? Например, чтобы изменить цвет текста, я бы использовал . Какой контроль я бы использовал, чтобы разместить NumberFormatter внутри? – ggkmath

0

В случае объекта вы должны использовать/Нет CASO де objeto, разви-се USAR:

 private function myLabelFunction(item:Object, column:GridColumn):String {  
      var result:String; 
      result = myFormatter.format(item[column.dataField]); 
      return result; 
     } 
Смежные вопросы