MyReport:DataGrid的打印和打印预览
本文说明怎样使用MyReport来实现Flex DataGrid组件的自己主动化打印预览和打印功能。
实现代码
<?
xmlversion="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%"height="100%" fontSize="24" horizontalAlign="center" paddingBottom="40"
paddingLeft="40" paddingRight="40" paddingTop="40" creationComplete="Init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import myreport.ReportEngine;
import myreport.ReportViewer;
import myreport.data.report.CaptionCellSetting;
import myreport.data.report.CaptionRowSetting;
import myreport.data.report.ReportSettings;
import myreport.data.report.TableCellSetting;
import myreport.data.report.TableColumnSetting;
import myreport.data.report.TableRowSetting;
private function Init():void
{
//初始化时设置DataGrid的数据源
_Grid.dataProvider = GetTableData();
}
private function GetTableData():ArrayCollection
{
var list:ArrayCollection = new ArrayCollection();
for (var i:int =0; i < 25; i++)
{
list.addItem({ID: i, 名称: "商品信息XXX 规格XXX 型号XXX", 数量: i+1, 金额: (i+1)*10, 日期:newDate()});
}
return list;
}
private function PreviewReport():void
{
//预览
var style:ReportSettings= DataGridToMyReport(_Grid, "演示样例:DataGridToMyReport");
myreport.ReportViewer.Instance.Show(new XML(style.ToXML()), style.TableData, style.ParameterData);
}
private function PrintReport():void
{
//直接打印
var style:ReportSettings= DataGridToMyReport(_Grid, "演示样例:DataGridToMyReport");
myreport.ReportEngine.PrintAsync(new XML(style.ToXML()), style.TableData, style.ParameterData);
}
/**
*
* 封装的转换方法。实现DataGid转成报表样式
*
* @param grid: 表格控件(传入前确保表格控件已经设置数据源)
* @param title:报表标题
*/
private function DataGridToMyReport(grid:DataGrid,title:String):ReportSettings
{
var style:ReportSettings = new ReportSettings();
//数据源
style.TableData = grid.dataProvideras ArrayCollection;
var params:Dictionary = newDictionary();
params.Title = title;
style.ParameterData = params;
//报表样式
style.TableHeaderRepeat = true;//表格头反复
style.TableFooterRepeat = true;//表格尾反复
style.AutoWidth = true;//报表宽度自己主动递增
style.PageByColumn = true;//分栏打印
style.SetUnit("px");
//标题
var captionRow:CaptionRowSetting = new CaptionRowSetting();
var caption:CaptionCellSetting = new CaptionCellSetting();
caption.Width = style.ClientWidth;
caption.Style.FontBold = true;
caption.Style.FontSize = 16;
caption.Style.TextAlign = "center";
caption.Value = "=@Title";
captionRow.CaptionCellSettings.push(caption);
style.PageHeaderSettings.push(captionRow);
//表格
var headerRow:TableRowSetting = new TableRowSetting();
var contentRow:TableRowSetting = new TableRowSetting();
var gridColumns:Array = grid.columns;
for each(var gridCol:DataGridColumnin gridColumns)
{
if(!gridCol.visible)
continue;
//加入列
var column:TableColumnSetting = new TableColumnSetting();
column.Width = gridCol.width;
style.TableColumnSettings.push(column);
//加入表格头单元格
var headerCell:TableCellSetting = new TableCellSetting();
headerCell.Style.FontBold = true;
headerCell.Style.TextAlign = "center";
headerCell.Value = gridCol.headerText;
headerRow.TableCellSettings.push(headerCell);
//加入表格主体单元格
var contentCell:TableCellSetting = new TableCellSetting();
contentCell.Value = "=#" + gridCol.dataField;
contentRow.TableCellSettings.push(contentCell);
}
style.TableHeaderSettings.push(headerRow);
style.TableDetailSettings.push(contentRow);
return style;
}
]]>
</mx:Script>
<mx:Label text="演示怎样用程序动态生成报表样式,实现DataGrid to MyReport。
" width="100%" textAlign="center"/>
<mx:Button label="打印预览"click="PreviewReport()"/>
<mx:Button label="直接打印"click="PrintReport()"/>
<mx:DataGridid="_Grid" width="600"height="100%" horizontalScrollPolicy="on">
<mx:columns>
<mx:DataGridColumn dataField="ID" headerText="ID"width="56"/>
<mx:DataGridColumn dataField="名称" headerText="名称"width="200"/>
<mx:DataGridColumn dataField="数量" headerText="数量"width="100"/>
<mx:DataGridColumn dataField="金额" headerText="金额"width="100"/>
<mx:DataGridColumn dataField="日期" headerText="日期"width="200"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
效果图
MyReport介绍
相关文章
备注
*技术交流与合作:QQ: 791663094。Email:kong.yee@foxmail.com