【问题标题】:How to get selected values (using checkBox) from DataGrid in flex如何从 flex 中的 DataGrid 获取选定的值(使用复选框)
【发布时间】:2012-01-02 18:12:19
【问题描述】:

我有一个数据网格,它从 XML 文件中获取值(使用 flex 中的 PHP 和 HTTP 请求从数据库中获取这个 xml 文件)。我在数据网格的每一行中创建了一个复选框。这是我的要求: 我想选择两个或三个复选框,并希望以某种形式从特定 ROW 中获取所有值,首选 arraycollection(这样我可以将此数组直接传递给条形图).. 有人可以帮助我吗我是 flex 新手。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="siteData.send()">
<mx:Script>
    <![CDATA[
        import mx.collections.XMLListCollection;
        import mx.controls.*;
        import mx.events.ListEvent;
        import mx.rpc.events.ResultEvent;
        import mx.controls.Alert;
        [Bindable] private var fullXML:XMLList; 
        private function contentHandler(evt:ResultEvent):void{
            fullXML = evt.result.values;
        }

    ]]>
</mx:Script>
<mx:VBox>
    <mx:Label text="This Data Grid is loading the full XML file"/>
    <mx:DataGrid width="600"  id="datagrid" dataProvider="{fullXML}">

        <mx:columns>
            <mx:DataGridColumn headerText="Select">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:HBox horizontalAlign="center">

                            <mx:CheckBox id="check"/>
                        </mx:HBox>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn dataField="release_version" headerText="Release"/>
            <mx:DataGridColumn dataField="build" headerText="build"/>
            <mx:DataGridColumn dataField="time_login" headerText="time_login"/>
            <mx:DataGridColumn dataField="time_tunnel" headerText="time_tunnel"/>
            <mx:DataGridColumn dataField="rate_login" headerText="time_tunnel"/>
            <mx:DataGridColumn dataField="rate_tunnel" headerText="rate_tunnel"/>
        </mx:columns>
    </mx:DataGrid>
</mx:VBox>
<mx:HTTPService url="http://localhost/php_genxml.php" id="siteData" result="contentHandler(event)" resultFormat="e4x"/>
</mx:Applicaton>

我想选中某个复选框并希望获取数据网格中与该复选框相对应的所有字段的值,有人可以帮助我如何获取选定的值(复选框的选定值)在 flex 和 action 脚本中。

【问题讨论】:

    标签: apache-flex actionscript datagrid checkbox


    【解决方案1】:
    <mx:itemRenderer>
                        <mx:Component>
                            <mx:HBox horizontalAlign="center" verticalAlign="middle">
                                <mx:Script>
                                    <![CDATA[
                                        var objTemp:Object = new Object();
    
                                        override public function set data(value:Object):void
                                        {
                                            if(value != null)
                                            {
                                                var xml:XML = XML(value);
                                                super.data = value;
                                                objTemp = outerDocument.xmlToObject(xml.toString());
                                                if(objTemp.story['quiz_score'] != null)
                                                {
                                                    chkAssignment.visible = false;
                                                }
                                                else
                                                {
                                                    chkAssignment.visible = true;
                                                }
                                                if(objTemp.story.is_selected == false)
                                                {
                                                    chkAssignment.selected = false;
                                                }
                                                else
                                                {
                                                    chkAssignment.selected = true;
                                                }
    
                                            }
                                        }
    
                                        private function deleteAssignment():void
                                        {
    
    
                                            if(chkAssignment.selected)
                                            {
                                                outerDocument.isChanged = true;
    
                                                objTemp.story.is_selected = true;
                                                var xml:XML = outerDocument.objectToXML(objTemp,"record");
    
                                                var xmlList:XMLList = xml.children();
                                                xml = xmlList[0] as XML;
    
                                                outerDocument.dgListeningLog.dataProvider[outerDocument.dgListeningLog.selectedIndex] = xml;
    
                                                outerDocument.arrAssignment.push({"story_name": XML(outerDocument.dgListeningLog.selectedItem).story_title.toString() ,"student_assignmentId": XML(outerDocument.dgListeningLog.selectedItem).assignment_id.toString(),"session_key": XML(outerDocument.dgListeningLog.selectedItem).session_key.toString(),"selectedIndex": outerDocument.dgListeningLog.selectedIndex.toString()});
                                            }
                                            else
                                            {
                                                outerDocument.isChanged = true;
    
                                                objTemp.story.is_selected = false;
                                                var xml:XML = outerDocument.objectToXML(objTemp,"record");
    
                                                var xmlList:XMLList = xml.children();
                                                xml = xmlList[0] as XML;
    
                                                outerDocument.dgListeningLog.dataProvider[outerDocument.dgListeningLog.selectedIndex] = xml;
    
                                                for(var i:int =0; i < outerDocument.arrAssignment.length; i++)
                                                {
                                                    if(outerDocument.arrAssignment[i].selectedIndex == outerDocument.dgListeningLog.selectedIndex)
                                                    {
                                                        outerDocument.arrAssignment.splice(i,1);
                                                        break;
                                                    }
                                                }
                                            } 
    
                                        }
    
                                    ]]>
                                </mx:Script>
                                <mx:CheckBox id="chkAssignment" change="{deleteAssignment();}"/>
                            </mx:HBox>
                        </mx:Component>
                    </mx:itemRenderer>
    

    在这里,我将选定的值或数组存储在另一个数组中,当单击删除按钮时,它将检查并从作为 dataGrid 数据提供者的主数组中删除该值。

    如果您在滚动数据网格时遇到问题 CheckBox 显示错误值而不是从代码中复制以下方法:

    覆盖公共函数集数据(值:对象):void

    主要有两个函数使用...

    public function objectToXML(obj:Object, qname:String):XML 
            {
                var qName:QName = new QName(qname);
                var xmlDocument:XMLDocument = new XMLDocument();
                var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument);
                var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(obj, qName, xmlDocument);
                var xml:XML = new XML(xmlDocument.toString());
                return xml;
            }
    
            public function xmlToObject(value:String):Object 
            {
                var xmlStr:String = value.toString();
                var xmlDoc:XMLDocument = new XMLDocument(xmlStr);
                var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true);
                var resultObj:Object = decoder.decodeXML(xmlDoc);
                return resultObj;
            }
    

    【讨论】:

    • 感谢 Sagar,但请让我知道如何在我附加的脚本中执行此操作。我用你的脚本试过了,好像有一些函数,比如 stringtoxml ischecked 等等 .. 代码中没有。
    • 感谢 Sagar 帮助我。我用你的脚本试过了..看起来有一些函数在代码中不存在,比如 stttingtoXml 和 ischecked 等。你能告诉我如何在我附加的代码中执行此操作。
    • 我刚刚更改了代码和另一件事,当您单击复选框时,我正在维护一个更改属性的变量。 and when checkbox is selected i am storing that data in array that is declared outside of that function so that when u press the remove button you can compare that and remove that from main dataprovider.如果它有效,请接受该答案..
    • 只要告诉我这对我来说是否可行,我就会确定解决。
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 2021-07-26
    • 2013-06-07
    • 2012-11-11
    • 2013-10-25
    • 2021-10-07
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多