星火DataGrid的怪异问题:
在下面的代码中,我设置了一个问题示例,并使用MX/Halo DataGrid (工作)和火花DataGrid (不工作)。请注意,两个网格中的第三列都有一个火花按钮的项呈现器。MX网格使用与火花网格相同的动作脚本代码。这两个网格的每一行中的按钮都应该在该特定行的status列读取"Released“时被禁用。
MX网格运行良好,而无论出于何种原因,奇数行上的星火网格总是启用中间行的按钮,而在更改status列时应该禁用它。如果火花栅格中有偶数行,它就能正常工作。
下面是代码示例:
<?xml version="1.0" encoding="utf-8"?>
<s: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"
width="921" height="668" minWidth="955" minHeight="600"
creationComplete="buildAnalytes(nsCount.value)">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]private var analytes:ArrayCollection;
private function buildAnalytes(count:int):void {
analytes = new ArrayCollection();
for (var i:int = 0;i<count;i++) {
var analyte:Object = new Object();
analyte.analyte = "ANA" + (i+1);
analyte.result = i + 100;
analyte.status = "Pending";
analytes.addItem(analyte);
}
}
private function release():void {
var analyte:Object;
for each (analyte in analytes) {
analyte.status = "Released";
}
analytes.refresh();
}
]]>
</fx:Script>
<s:Panel id="panelResults" x="45" y="20" width="570" height="300" title="Results -- Halo (MX) DataGrid">
<mx:DataGrid id="gridResultsMX" width="100%" editable="true" height="100%" dataProvider="{analytes}">
<mx:columns>
<mx:DataGridColumn width="100" dataField="analyte" headerText="Analyte" editable="false"/>
<mx:DataGridColumn width="100" dataField="result" headerText="Result" editable="true"/>
<mx:DataGridColumn width="100" dataField="comments" headerText="Comments" editable="false">
<mx:itemRenderer>
<fx:Component>
<mx:HBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
<s:Button width="90" height="15" label="Comments"
enabled="{data.status != 'Released'}"
/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="status" headerText="Status" editable="false"/>
</mx:columns>
</mx:DataGrid>
</s:Panel>
<s:Panel id="panelResults2" x="44" y="341" width="570" height="300" title="Results -- Spark DataGrid">
<s:DataGrid id="gridResultsSpark" visible="true" x="0" y="0" width="100%"
height="100%"
dataProvider="{analytes}" editable="true" fontSize="10">
<s:columns>
<s:ArrayList>
<s:GridColumn width="100" dataField="analyte" editable="false" headerText="Analyte"></s:GridColumn>
<s:GridColumn width="200" dataField="result" editable="true" headerText="Result"></s:GridColumn>
<s:GridColumn width="90" editable="false" headerText="Comments">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer textAlign="center">
<mx:HBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
<s:Button width="70" height="15" label="Comments"
enabled="{data.status != 'Released'}"
/>
</mx:HBox>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
<s:GridColumn dataField="status" editable="false" headerText="Status"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:Panel>
<s:NumericStepper x="663" y="317" minimum="1" value="4" maximum="25" id="nsCount"/>
<s:Button x="724" y="318" label="Build Analytes" click="buildAnalytes(nsCount.value)"/>
<s:Button x="830" y="318" label="Release" click="release()"/>
</s:Application>还有其他人遇到过这个吗?我的代码里有什么可以解释的吗?
任何帮助或想法都将不胜感激。哦,这是FlashBuilder 4.6,使用4.6SDK。
发布于 2014-12-09 23:57:15
为了避免这个问题,您可以像这样编辑release函数:
...
private function release():void {
var temp_analytes:ArrayCollection = new ArrayCollection();
var obj:Object
for each (var analyte:Object in analytes) {
obj = {
analyte : analyte.analyte,
result : analyte.result,
status : "Released"
}
temp_analytes.addItem(obj);
}
analytes = temp_analytes;
analytes.refresh();
}
...这段代码是100%为我工作的(在Flex 4.5和4.6上进行了测试)。
我希望这能帮到你。
https://stackoverflow.com/questions/27383782
复制相似问题