最近做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网上分享的资源少之又少~
最后希望我的经验能帮到其他人,同时也希望大家把自己的经验分享出来。