//创建打印预览和直接打印的报表对象。 private DIYReport.ReportModel.RptReport createRptReport(string moduleID, PrintTempleteContentInfo templeteContent) { try { //PrintTempleteContentInfo templeteContent = _ReportData.GetPrintTempleteContent(templeteID); DIYReport.ReportModel.RptReport reportContent = DIYReport.ReportReader.Instance().ReadFromXmlString(templeteContent.TempleteXmlContent); reportContent.UserParamList = convertToRptParam(_ReportData.ReportParamList); //以后再追加报表子表的处理问题 DIYReport.Interface.ISubReportCommand subCommand = new SubReportCommand(templeteContent, _ReportData.DataSource); //subCommand.SetDataSourceParams = pars; reportContent.SubReportCommand = subCommand; // if (_ReportData.DataSource is DataSet) { DataSet dsData = _ReportData.DataSource; reportContent.DataSource = dsData.Tables[templeteContent.DataSource]; //} //else { // throw new MB.Util.APPException("目前报表的数据类型只支持 DataSet 请先转换", MB.Util.APPMessageType.SysErrInfo); //} return(reportContent); } catch (Exception ex) { throw MB.Util.APPExceptionHandlerHelper.PromoteException(ex, string.Format("根据功能模块ID:{0},打印模板ID: {1} 创建报表对象出错。", moduleID, templeteContent.GID)); } }
/// <summary> /// 得到子表的数据源 /// </summary> /// <param name="parentRow"></param> /// <param name="relationMember"></param> /// <param name="reportName"></param> /// <returns></returns> public object GetReportDataSource(DataRow parentRow, string relationMember, string reportName) { PrintTempleteContentInfo childInfo = _PrintTemplete.Childs.FirstOrDefault(o => string.Compare(o.Name, reportName, true) == 0); if (childInfo == null) { return(null); } if (_DataSource.Tables.Contains(childInfo.DataSource)) { if (string.IsNullOrEmpty(relationMember)) { return(_DataSource.Tables[childInfo.DataSource]); } else { DataRow[] drs = parentRow.GetChildRows(relationMember, System.Data.DataRowVersion.Default); DataTable newTable = null; if (drs.Length > 0) { newTable = drs[0].Table.Clone(); foreach (DataRow dr in drs) { newTable.Rows.Add(dr.ItemArray); } } return(newTable); } } else { return(null); } }
/// <summary> /// 子报表相关处理。 /// </summary> /// <param name="printTemplete"></param> /// <param name="dsData"></param> public SubReportCommand(MB.WinPrintReport.Model.PrintTempleteContentInfo printTemplete, DataSet dsData) { _PrintTemplete = printTemplete; _DataSource = dsData; _SubReportNames = new List <string>(); if (_PrintTemplete.Childs != null) { foreach (MB.WinPrintReport.Model.PrintTempleteContentInfo child in _PrintTemplete.Childs) { _SubReportNames.Add(child.Name); } } }
/// <summary> /// 显示打印模板设计。 /// </summary> /// <param name="moduleID"></param> /// <param name="templeteID"></param> public void ShowDesign(string moduleID, PrintTempleteContentInfo templeteContent) { _CurrentTempleteContent = templeteContent; if (string.IsNullOrEmpty(templeteContent.TempleteXmlContent)) { var newReport = DIYReport.ReportModel.RptReport.NewReport(templeteContent.Name, templeteContent.GID); templeteContent.TempleteXmlContent = DIYReport.ReportWriter.Instance().BuildXMLString(newReport); } DIYReport.ReportModel.RptReport reportContent = createRptReport(moduleID, templeteContent); DIYReport.Extend.EndUserDesigner.MainDesignForm frmDesign = new DIYReport.Extend.EndUserDesigner.MainDesignForm(reportContent); frmDesign.BeginXReportIOProcess += new DIYReport.ReportModel.XReportIOEventHandler(frmDesign_BeginXReportIOProcess); frmDesign.ShowDialog(); }
/// <summary> /// 打印浏览。 /// </summary> /// <param name="moduleID"></param> /// <param name="templeteID"></param> /// <param name="parmValues"></param> public void ShowPreview(string moduleID, PrintTempleteContentInfo templeteContent) { MB.Util.TraceEx.Write("开始执行 ShowPreview "); _CurrentTempleteContent = templeteContent; DIYReport.ReportModel.RptReport report = createRptReport(moduleID, templeteContent); MB.Util.TraceEx.Write("createRptReport 成功 "); if (report != null) { DIYReport.UserDIY.DesignEnviroment.CurrentReport = report; DIYReport.Extend.Print.XPrintingSystem printSystem = new DIYReport.Extend.Print.XPrintingSystem(); printSystem.PrintPreview(report); } else { throw new MB.Util.APPException(string.Format("该报表模板 {0} 还没有开始绘制,请在报表打印设计器中先设计。", templeteContent.Name), MB.Util.APPMessageType.DisplayToUser); } }
/// <summary> /// 报表直接打印。可以指定是否弹出打印对话框 /// </summary> /// <param name="moduleID"></param> /// <param name="templeteContent"></param> /// <param name="isDirectPrint"></param> /// <returns></returns> public int Print(string moduleID, PrintTempleteContentInfo templeteContent, bool isPopUpPrintDialog) { _CurrentTempleteContent = templeteContent; DIYReport.ReportModel.RptReport report = createRptReport(moduleID, templeteContent); if (report != null) { if (!isPopUpPrintDialog) { PrinterSettings settings = new PrinterSettings(); report.PrintName = settings.PrinterName; } DIYReport.UserDIY.DesignEnviroment.CurrentReport = report; DIYReport.Extend.Print.XPrintingSystem printSystem = new DIYReport.Extend.Print.XPrintingSystem(); printSystem.Print(report); } else { throw new MB.Util.APPException(string.Format("该报表模板 {0} 还没有开始绘制,请在报表打印设计器中先设计。", templeteContent.Name), MB.Util.APPMessageType.DisplayToUser); } return(0); }
/// <summary> /// 报表直接打印。弹出打印对话框 /// </summary> /// <param name="moduleID"></param> /// <param name="templeteID"></param> /// <param name="parmValues"></param> /// <returns></returns> public int Print(string moduleID, PrintTempleteContentInfo templeteContent) { return(Print(moduleID, templeteContent, true)); }