Apache flex 如何在数据网格的iteamreander中查找复选框值(选中/未选中)?

Apache 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

我有3个复选框用于计算金额。我在datgrid中使用了Datagrid

<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”