2013-12-17 4 views
0

Я создаю AdvancedDataGrid с иерархическим именем как DataProvider. Добавить свой собственный ItemEditor для поля @value в DataProvider.Заменить запятую точкой в ​​Flex HierarchicalData с собственным рендерером, поскольку itemEditor не работает

Все работает нормально, если значение не задано, фон установлен на красный, а значение равно n/a , но замена запятой не работает. Я буду очень рад, если кто-то сможет мне помочь с этой проблемой.

Вот мой MyItemEditor.as класс:

import mx.controls.dataGridClasses.DataGridListData; 
import mx.controls.TextInput; 
public class MyItemEditor extends TextInput { 
    override public function set data(value : Object) : void { 
     if (value == null || value[DataGridListData(listData).dataField] == null) 
      return; 
     super.data = value; 
     if (String(value[DataGridListData(listData).dataField]).length == 0) { 
      setStyle("backgroundColor", "#FF0000"); 
      value[DataGridListData(listData).dataField] = "n/a"; 
     } else if (String(value[DataGridListData(listData).dataField]).indexOf(',') > -1) { 
      /** worked */ 
      setStyle("backgroundColor", "#FFFF00"); 
      /** does not work */ 
      //value[DataGridListData(listData).dataField].replace(',', '.'); 
      //String(value[DataGridListData(listData).dataField]).replace(',', '.'); 
      //value[DataGridListData(listData).dataField].replace(/,/, '.'); 
      String(value[DataGridListData(listData).dataField]).replace(/,/, '.'); 
     } else { 
      setStyle("backgroundColor", "#FFFFFF"); 
     } 
    } 
} 

И мой Test.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init_data()"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.HierarchicalData; 
      [Bindable] private var xmlData : XMLList; 
      [Bindable] private var xmlDP : HierarchicalData; 
      private function init_data() : void { 
       xmlData =<> 
       <item name="Project 1"> 
        <valuetype name="Spannung" value="5" unit="V" /> 
        <valuetype name="Widerstand" value="500" unit="Ohm" /> 
        <valuetype name="Stromstaerke" value="0,01" unit="A" /> 
       </item></>; 
       xmlDP = new HierarchicalData(xmlData); 
      } 
     ]]> 
    </mx:Script> 
    <mx:HBox width="100%" height="100%"> 
     <mx:AdvancedDataGrid 
      id="dataGrid" 
      height="100%" 
      width="75%" 
      rowHeight="25" 
      dataProvider="{xmlDP}" 
      folderClosedIcon="{null}" 
      folderOpenIcon="{null}" 
      defaultLeafIcon="{null}" 
      editable="true" 
      draggableColumns="false"> 
      <mx:groupedColumns> 
       <mx:AdvancedDataGridColumn 
        editable="false" 
        headerText="Name" 
        dataField="@name" 
        minWidth="500"/> 
       <mx:AdvancedDataGridColumn 
        editable="true" 
        headerText="Wert" 
        dataField="@value" 
        minWidth="125" 
        rendererIsEditor="true"/> 
       <mx:AdvancedDataGridColumn 
        editable="false" 
        headerText="Einheit" 
        dataField="@unit" 
        minWidth="125"/> 
      </mx:groupedColumns> 
     <mx:rendererProviders> 
      <mx:AdvancedDataGridRendererProvider 
       depth="2" 
       columnIndex="1" 
       columnSpan="1" 
       renderer="MyItemEditor"/> 
     </mx:rendererProviders> 
    </mx:AdvancedDataGrid> 
    <mx:Tree id="dataTree" defaultLeafIcon="{null}" 
     dataProvider="{XML(xmlData).children()}" 
     labelField="@value" height="100%" width="25%"/> 
    </mx:HBox> 

Дерево проверить, если значения были установлены. В некоторых случаях значение не будет установлено в первый раз. И еще немного странно.

ответ

0

В Flex (как и на большинстве современных языков) строки неизменяемы. Метод replace() не изменяет строку, на которую он применяется, но создает новую строку, содержащую результат.

result = original.replace(',', '.'); 
+0

Благодаря с значением [DataGridListData (ListData) .dataField] = Строка (значение [DataGridListData (ListData) .dataField]) заменить (/, /, '').; Это сработало. – user3112198

 Смежные вопросы

  • Нет связанных вопросов^_^