Apache flex 如何在数据网格的iteamreander中查找复选框值(选中/未选中)?
我有3个复选框用于计算金额。我在datgrid中使用了DatagridApache flex 如何在数据网格的iteamreander中查找复选框值(选中/未选中)?,apache-flex,air,flash,Apache Flex,Air,Flash,我有3个复选框用于计算金额。我在datgrid中使用了Datagrid <mx:DataGrid> <mx:itemRenderer> <mx:Component> <mx:CheckBox id=mycheckbox change="calc()"/> </mx:Component> </mx:itemRenderer> ... public fu
<mx:DataGrid>
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox id=mycheckbox change="calc()"/>
</mx:Component>
</mx:itemRenderer>
...
public function calc():void
{
statistic.dataProvider = mycheckbox.selectedItem;
}
...
公共函数calc():void
{
statistic.dataProvider=mycheckbox.selectedItem;
}
但它会抛出错误,比如调用可能未定义的方法(calc)复选框没有“selectedItem”函数或属性 mycheckbox.selected将根据是否选中sed复选框返回true或false
不确定通过将dataprovider设置为true或false来实现什么,在我看来,您似乎想使用一个复选框,但复选框没有“selectedItem”函数或属性 mycheckbox.selected将根据是否选中sed复选框返回true或false
不确定通过将dataprovider设置为true或false来实现什么,在我看来,似乎您想要使用一个复选框,您不能按照您所做的方式给复选框一个id,并期望它作为一个单独的组件。 将复选框指定为列的项目呈现器时,您并不是在谈论单个复选框。 您将处理与datagrid中的行数量相同的复选框。 下面的示例演示如何确定是否选中了特定行中的复选框
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private var ac:ArrayCollection=new ArrayCollection([
{name: "John", test: true},
{name: "Joe", test: false}]);
private function init() {
dg.dataProvider=ac;
}
public function check():void {
var obj:Object=dg.selectedItem;
Alert.show("Checkbox=" + obj.test);
}
]]>
</mx:Script>
<mx:DataGrid id="dg"
dataProvider="{ac}"
click="check()">
<mx:columns>
<mx:DataGridColumn dataField="name">
</mx:DataGridColumn>
<mx:DataGridColumn>
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="Test"
selected="{data.test}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
</mx:Application>
有时,当您使用嵌套的itemrenderer时,flex似乎无法更新datagrid的数据提供程序。当复选框上发生更改事件时,可以显式设置dataprovider行的相应属性,如下所示
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="Test" selected="{data.test}"
change="data.test=selected"/>
</mx:Component>
</mx:itemRenderer>
您不能按照您所做的方式给复选框一个id,并期望它作为一个单独的组件。 将复选框指定为列的项目呈现器时,您并不是在谈论单个复选框。 您将处理与datagrid中的行数量相同的复选框。 下面的示例演示如何确定是否选中了特定行中的复选框
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private var ac:ArrayCollection=new ArrayCollection([
{name: "John", test: true},
{name: "Joe", test: false}]);
private function init() {
dg.dataProvider=ac;
}
public function check():void {
var obj:Object=dg.selectedItem;
Alert.show("Checkbox=" + obj.test);
}
]]>
</mx:Script>
<mx:DataGrid id="dg"
dataProvider="{ac}"
click="check()">
<mx:columns>
<mx:DataGridColumn dataField="name">
</mx:DataGridColumn>
<mx:DataGridColumn>
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="Test"
selected="{data.test}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
</mx:Application>
有时,当您使用嵌套的itemrenderer时,flex似乎无法更新datagrid的数据提供程序。当复选框上发生更改事件时,可以显式设置dataprovider行的相应属性,如下所示
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="Test" selected="{data.test}"
change="data.test=selected"/>
</mx:Component>
</mx:itemRenderer>
在itemrenderer中使用outerDocument.functionname
,并将函数设置为public。这是Flex的一个限制,层次结构管理不善。在itemrenderer中使用outerDocument.functionname
,并将函数设置为public。这是Flex的一个限制,层次结构管理不善。效果很好!在第二部分中,如果在change=“data.test=”selected”中出现错误,则必须将其更改为change=“data.test=!data.test”,效果非常好!在第二部分中,由于change=“data.test=selected”出现错误,必须将其更改为change=“data.test=!data.test”