Recently, many depressing tasks have been encountered in the flex datagride. The title is static and should be written once every time. It is inconvenient to use and important data can be exported to excel, but there is no ready-made method in it. I searched for it and found that many people use JSP to assist in export. I think it is not practical and often garbled. I modified it and used the flex built-in method to implement relevant functions.
Source code:
<? XML version = "1.0" encoding = "UTF-8"?> <Br/> <! -- Viruscodecn@gmail.com --> <br/> <mx: DataGrid xmlns: MX = "http://www.adobe.com/2006/mxml" <br/> creationcomplete = "initdatagrid ()"> <br/> <mx: SCRIPT> <br/> <! -- [CDATA [<br/> Import MX. controls. datagridclasses. datagridcolumn; <br/> Import MX. controls. alert; </P> <p>/* <br/> * <value> <DATA> <ename> </ename> <cname> </data> </ value> <br/> */<br/> [Bindable] <br/> Public var titlexml: XML; </P> <p> Public var downloadpolicy: String = "off"; </P> <p> private function initdatagrid (): void <br/> {<br/> var titlearray: array = new array; </P> <p> for each (var xml: XML in titlexml. d ATA) <br/>{< br/> var datagridcolumn: datagridcolumn = new datagridcolumn; <br/> datagridcolumn. datafield = XML (XML. ename ). tostring (); <br/> datagridcolumn. headertext = XML (XML. cname ). tostring (); <br/> titlearray. push (datagridcolumn); <br/>}< br/> This. columns = titlearray; </P> <p> initrightcontext (); <br/>}</P> <p> // right-click a blank space. <br/> private function initrightcontext (): void <br/>{< br/> var contextmenu: contextmenu = new CO Ntextmenu (); <br/> contextmenu. hidebuiltinitems (); </P> <p> If (downloadpolicy = "on") <br/>{< br/> var saveexcelcontextmenuitem: contextmenuitem = new contextmenuitem ("export as Excel"); <br/> saveexcelcontextmenuitem. addeventlistener (contextmenuevent. menu_item_select, saveexcel); <br/> contextmenu. customitems. push (saveexcelcontextmenuitem); <br/>}</P> <p> This. contextmenu = contextmenu; <br/>}</P> <p> private functio N saveexcel (Event: contextmenuevent): void <br/>{< br/> // loaddginexcel (this, 'HTTP: // 127.0.0.1: 8080/salesystem/services/excelexport. JSP '); <br/> loaddginexcelbysave (this); <br/>}< br/>]> <br/> </MX: SCRIPT> <br/> <mx: SCRIPT> <br/> <! [CDATA [<br/>/** <br/> * simple script to convert a DataGrid to a HTML table and then <br/> * pass it on to an external Excel Exporter <br/> */</P> <p> // libs that are mostly used <br/> // (only a number are necessary for the DataGrid conversion and export) <br/> Import flash. errors. *; <br/> Import flash. events. *; <br/> Import flash. external. *; <br/> Import flash.net. URLRequest; <br/> Import flash. n ET. urlvariables; </P> <p>/** <br/> * convert the DataGrid to a HTML table <br/> * styling etc. can be done externally <br/> * @ Param: DG DataGrid contains the DataGrid that needs to be converted <br/> * @ returns: string <br/> */<br/> private function convertdgtohtmltable (DG: DataGrid): String <br/>{< br/> var Font: String = DG. getstyle ('fontfamily '); <br/> var size: String = DG. getstyle ('fontsize'); <B R/> var STR: String = ''; <br/> var colors: String =''; <br/> var style: String = 'style = "font-family: '+ font +'; font-size: '+ size + 'pt; "'; <br/> var hcolor: array; </P> <p> If (DG. getstyle ("headercolor ")! = Undefined) <br/>{< br/> hcolor = [DG. getstyle ("headercolor")]; <br/>}< br/> else <br/>{< br/> hcolor = DG. getstyle ("headercolors"); <br/>}</P> <p> STR + = '<Table width = "' + DG. width + '"border =" 1 "> <thead> <tr width ="' + DG. width + '"style =" background-color: #' + number (hcolor [0]). tostring (16) + '"mce_style =" background-color: #' + number (hcolor [0]). tostring (16) + '">'; </P> <p> for (var I: Int = 0; I <DG. colu MNS. length; I ++) <br/>{< br/> colors = DG. getstyle ("themecolor"); </P> <p> If (DG. columns [I]. headertext! = Undefined) <br/>{< br/> STR + = "<TH" + style + ">" + DG. columns [I]. headertext + "</Th> "; <br/>}< br/> else <br/> {<br/> STR + = "<TH" + style + ">" + DG. columns [I]. datafield + "</Th>"; <br/>}< br/> STR + = "</tr> </thead> <tbody> "; <br/> colors = DG. getstyle ("alternatingrowcolors"); </P> <p> for (var j: Int = 0; j <DG. dataprovider. length; j ++) <br/>{< br/> STR + = "<tr width =/" "+ math. ceil (DG. width) + "/"> "; </P> <P> for (var k: Int = 0; k <DG. columns. length; k ++) <br/>{</P> <p> If (DG. dataprovider. getitemat (j )! = Undefined & DG. dataprovider. getitemat (j )! = NULL) <br/>{</P> <p> If (DG. Columns [K]. labelfunction! = Undefined) <br/>{< br/> STR + = "<TD width =/" "+ math. ceil (DG. columns [K]. width) + "/" "+ style +"> "+ DG. columns [K]. labelfunction (DG. dataprovider. getitemat (J), DG. columns [K]. datafield) + "</TD> "; </P> <p >}< br/> else <br/> {<br/> STR + = "<TD width =/" "+ math. ceil (DG. columns [K]. width) + "/" "+ style +"> "+ DG. dataprovider. getitemat (j) [DG. columns [K]. datafield] + "</TD>"; <br/>}< br/> STR + = "< /Tr> "; <br/>}< br/> STR + =" </tbody> </table> "; </P> <p> return STR; <br/>}</P> <p> private function loaddginexcelbysave (DG: DataGrid): void <br/>{< br/> var BA: bytearray = new bytearray; <br/> BA. writeutf (convertdgtohtmltable (DG); <br/> VaR _ fileref: filereference = new filereference (); <br/> _ fileref. save (BA, "data.xls"); // save to disk. A system save dialog box is displayed. <Br/> BA. clear (); <br/>}< br/>] --> <br/> </MX: SCRIPT> <br/> </MX: DataGrid>
It should be easy to use. If you have any questions, contact me online.