在actionscript 3中向下滚动后,将选中DataGrid中的复选框

时间:2012-02-12 06:05:40

标签: actionscript-3

我已经实现了代码,我将Checkbox放在DataGrid中。问题是,当选中复选框并向下滚动时,也会检查其他复选框,而不检查它们。如果我再次向上滚动,我最初检查的复选框不再被检查。请有人帮帮我。

以下是代码:

 <?xml version="1.0" encoding="utf-8"?>
   <s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    initialize="main()" textAlign="right" textRotation="rotate270" title="HomeView">
    <fx:Script>
        <![CDATA[

            import mx.collections.ArrayList;
            import mx.graphics.SolidColorStroke;

            import spark.primitives.Rect;
            import spark.skins.spark.DefaultComplexItemRenderer;
            import spark.skins.spark.DefaultItemRenderer;
            private var bL:ArrayList;

            public function main():void{


            hey.dataProvider=dataprovider;      
            }




        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:ArrayList id="dataprovider">


            <fx:Object actName="myact1" actnumber="2" name="1"/>
                <fx:Object actName="myact2" actnumber="55" name="2"/>
            <fx:Object actName="myact1" actnumber="2" name="3"/>
            <fx:Object actName="myact2" actnumber="55" name="4"/>
            <fx:Object actName="myact1" actnumber="2"/>
            <fx:Object actName="myact2" actnumber="55"/>
            <fx:Object actName="myact1" actnumber="2"/>
            <fx:Object actName="myact2" actnumber="55"/>
            <fx:Object actName="myact1" actnumber="2" name="1"/>
            <fx:Object actName="myact2" actnumber="55" name="2"/>
            <fx:Object actName="myact1" actnumber="2" name="3"/>
            <fx:Object actName="myact2" actnumber="55" name="4"/>
            <fx:Object actName="myact1" actnumber="2"/>
            <fx:Object actName="myact2" actnumber="55"/>
            <fx:Object actName="myact1" actnumber="2"/>
            <fx:Object actName="myact2" actnumber="55"/>
            <fx:Object actName="myact1" actnumber="2" name="1"/>
            <fx:Object actName="myact2" actnumber="55" name="2"/>
            <fx:Object actName="myact1" actnumber="2" name="3"/>
            <fx:Object actName="myact2" actnumber="55" name="4"/>
            <fx:Object actName="myact1" actnumber="2"/>
            <fx:Object actName="myact2" actnumber="55"/>
            <fx:Object actName="myact1" actnumber="2"/>
            <fx:Object actName="myact2" actnumber="55"/>
        </s:ArrayList>
    </fx:Declarations>
    <s:DataGrid id="hey" x="-2" y="-1" width="323" height="415">
        <s:columns>
            <s:ArrayList>

                <s:GridColumn id="my" dataField="wierd">

                </s:GridColumn>

                <s:GridColumn id="hi" dataField="checkboxes">

                    <s:itemRenderer>
                        <fx:Component>
                            <s:GridItemRenderer>

                                <fx:Script>
                                    <![CDATA[
            protected function checkbox1_clickHandler(event:MouseEvent):void
                                        {
                                    trace("clicked");
                                        }
                                    ]]>
                                </fx:Script>

                <s:CheckBox click="checkbox1_clickHandler(event)">

                                </s:CheckBox>
                            </s:GridItemRenderer>

                        </fx:Component>

                    </s:itemRenderer>

                </s:GridColumn>

            </s:ArrayList>

        </s:columns>



    </s:DataGrid>
   </s:View>

1 个答案:

答案 0 :(得分:0)

以下是解决此问题的方法。 (解决方法)

其原因与Datagrid

中实施的方式有关

例如:在Datagrid内创建50行时。它不会创建50个不同的行实例..(在滚动场景中)而是,当您向上或向下滚动时,相同的行将填充不同的数据..(为您提供滚动和查看它们的无缝体验)< / p>

解决这个问题的诀窍是研究这个链接中的样本

http://www.actionscript.org/forums/attachment.php3?attachmentid=38409&d=1335099663

您必须分析示例中找到的单元格渲染器类中的代码。在您的情况下,您必须修改DefaultItemRendererDefaultComplexItemRenderer列所使用的Datagrid