Flex号称在RIA开发方面有很大的优势但是通过本人2年的RIA开发经历才知道,Flex搞简单的企业级开发还算比较快,但是稍微复杂一点就不行了,flex没有合适的报表组件,Flex界面上的很多文字内容不能复制。每种技术都有自己的缺陷,本篇我将介绍一个表格右键复制功能。
先介绍下怎么用吧。
1 导入gridcopy.swc,swc包在附件中。
2 引入表格复制工具类
import com.beyondsoft.copy.util.GridCopyUtils;
3 在表格的creationComplete事件中添加对右键复制功能。
private function init():void{ GridCopyUtils.addCopy(dg3); }
addCopy就是在表格上添加复制功能,该函数有2个参数
第一个是表格的引用对象,在mxml中时表格的id
第二个是导出禁用的列的dataField集合,例如有可能表格的第一列是checkbox那么这列不需要导出。
4 修改表格代码
默认的情况下Flex的表格组件是只能选择单行的,要想选择多行需要下面代码
selectable="true" allowMultipleSelection="true"
下面是整个完成的测试代码
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" fontSize="12" creationComplete="init()" > <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.controls.dataGridClasses.DataGridColumn; import com.beyondsoft.copy.util.GridCopyUtils; import mx.collections.ArrayCollection; import flash.system.System; [Bindable] private var ac:ArrayCollection=new ArrayCollection([ {col1:"1",col2:"测试1",col3:"31"}, {col1:"21",col2:"测试2",col3:"3"}, {col1:"13",col2:"测试3",col3:"3"}, {col1:"14",col2:"测试4",col3:"32"}, {col1:"54",col2:"测试6",col3:"3"}, {col1:"17",col2:"测试3",col3:"13"} ]); private function init():void{ GridCopyUtils.addCopy(dg); } private function getFun(item:Object,dataGridColumn:DataGridColumn):String{ return "testsaadasd测试Fun"; } ]]> </mx:Script> <mx:DataGrid showScrollTips="true" dataProvider="{ac}" selectable="true" allowMultipleSelection="true" id="dg" > <mx:columns> <mx:DataGridColumn headerText="姓名" dataField="col1" visible="true" /> <mx:DataGridColumn headerText="测试" dataField="col2" labelFunction="getFun"/> <mx:DataGridColumn headerText="性别" dataField="col3"/> <mx:DataGridColumn headerText="姓名" dataField="col1"/> <mx:DataGridColumn headerText="测试" dataField="col2"/> </mx:columns> </mx:DataGrid> </mx:Application>
运行上面的代码,在表格的上面点击鼠标右键,发现多出了 复制选中行 复制所有行 菜单,多行的选择是通过按住ctrl键或shift键的,选择复制所有行后,打开excel,ctrl+v后表格的全部内容就到excel中了。
哈哈,一个简单的复制功能就搞好了,下面说下这个复制的原理吧,这个需求是客户提出的,在html上这个功能不用自己写代码,直接复制到excel中就可以了。
其实在excel中一列单元格是以\t结尾的,\n是一行的结束,只要知道这一点就完成可以实现上面的功能了,欢迎大家使用,有什么问题请给我留言,如果需要源代码请留下邮箱。