flex Datagrid数据列双击事件实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang_jian__/article/details/51828533

    最近做flex的项目遇到了一个问题:要实现双击DataGrid的一行数据,将该行数据赋值到打开的新窗口中。

   在网上找了好久,发现要么答非所问,要么就是只言片语。所以我想通过CSDN这个平台把我的经验总结一下。先贴一下代码:

    <mx:DataGrid id="dg" width="100%" height="100%"  rowCount="12" doubleClickEnabled="true"  itemDoubleClick="readMail(null)" horizontalScrollPolicy="on" dataProvider="{dataArr}">
                    <mx:columns >
                        <mx:DataGridColumn textAlign="center" width="40"
                                           dataField="selected" headerText="Select"   
                                           itemRenderer="views.common.checkBox.CheckBoxItemDataRenderer"   
                                           headerRenderer="views.common.checkBox.CheckBoxHeaderRenderer"/>
                        <mx:DataGridColumn headerText="ID" dataField="REC_ID" headerStyleName="headerStyle" visible="true"/>
                        <mx:DataGridColumn headerText="系统" dataField="SYS_NM" headerStyleName="headerStyle"/>
                        <mx:DataGridColumn headerText="名称" dataField="QUERY_NM" headerStyleName="headerStyle"/>
                        
                        <mx:DataGridColumn headerText="SQL语句" dataField="QUERY_STATEMENT" width="600"  headerStyleName="headerStyle"/>
                        <mx:DataGridColumn headerText="备注" dataField="REMARKS" headerStyleName="headerStyle" />
                    </mx:columns>
                </mx:DataGrid>

上面是flex标签元素datagrid,默认情况下,它的的双击事件是屏蔽的。所以我们要先把双击事件放开,通过属性doubleClickEnabled="true"。

然后,有人可能会直接使用doubleClick属性来设置触发双击事件,这样做会有一个问题,就是无论你双击datagrid的什么位置,都会触发事件,满足不了我们的需求。

最后,看到有个itemDoubleClick属性,这个属性刚好是行数据的双击事件,然后我就立马试了一下,果然好用。得意好像捡到宝了。下面是双击事件触发的方法,有一点需要讲一下:

/**
             * 双击事件
             */
            private function readMail(event:MouseEvent):void
            {
                if(dg.selectedItem!=null){
                    var obj:Object = new Object();
                    //Alert.show("0-"+obj.QUERY_STATEMENT);
                    obj.title = "编辑查询";
                    obj.statement = dg.selectedItem.QUERY_STATEMENT;
                    var editExcuteQuery:EditExcuteQuery = new EditExcuteQuery();
                    editExcuteQuery.obj = obj;
                    PopUpManager.addPopUp(editExcuteQuery, this, false);
                    PopUpManager.centerPopUp(editExcuteQuery);
                }else{
                    Alert.show("空");
                }
                
                
            }

从代码可以看到,我进行了一个判断。原因是什么呢?itemDoubleClick这个双击事件竟然对空行也会起作用,这样就会扰乱我们。因此,在此进行了过滤,在双击数据行的时候才会触发事件,打开新窗口并传值进行。

   其实这些对于flex大牛来说可能不算什么,但是对于初涉flex小白来说,可算为难了。而且,flex网上分享的资源少之又少~

最后希望我的经验能帮到其他人,同时也希望大家把自己的经验分享出来奋斗


扫描二维码关注公众号,回复: 4140762 查看本文章

猜你喜欢

转载自blog.csdn.net/zhang_jian__/article/details/51828533