0

我创建了一个带有 HierarchicalData 作为 DataProvider 的 AdvancedDataGrid。为 DataProvider 中的 @value 字段添加我自己的 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>

树用于检查是否设置了值。有时该值不会在第一次设置。也有点奇怪。

4

1 回答 1

0

在 Flex 中(就像在大多数现代语言中一样),字符串是不可变的。该replace()方法不会更改应用它的字符串,但会创建一个保存结果的新字符串。

result = original.replace(',', '.');
于 2013-12-18T11:38:14.873 回答