我使用HierarchicalData创建一个AdvancedDataGrid作为DataProvider。 为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>
树将检查值是否已设置。 有时,第一次不会设置该值。我也有点奇怪。
答案 0 :(得分:0)
在Flex中(与大多数现代语言一样),字符串是不可变的。 replace()
方法不会改变应用它的字符串,但会创建一个保存结果的新String。
result = original.replace(',', '.');