private void DoPrint() { DataView dv = (DataView)dgv_apply_details.DataSource; Report report = new Report(); //给report注册数据源 report.RegisterData(dv, "Purchasment"); //设置能在报表中使用 report.GetDataSource("Purchasment").Enabled = true; ReportPage page1 = new ReportPage(); page1.Name = "Page1"; page1.SetDefaults(); //设置标题 page1.ReportTitle = new ReportTitleBand(); page1.ReportTitle.Name = "ReportTitle1"; page1.ReportTitle.Height = 0;//Units.Centimeters * 0.1f; //给标题赋值 TextObject txtTitle = new TextObject(); txtTitle.Name = "TextTitle"; txtTitle.Bounds = new RectangleF(0, 0, Units.Centimeters * 19, Units.Centimeters * 1); txtTitle.Text = "药品采购汇总单"; txtTitle.HorzAlign = HorzAlign.Center; txtTitle.VertAlign = VertAlign.Center; txtTitle.Font = new Font("微软雅黑", 20, FontStyle.Bold); page1.ReportTitle.Objects.Add(txtTitle); GroupHeaderBand group1 = new GroupHeaderBand(); group1.Name = "GroupHeader1"; group1.Height = Units.Centimeters * 2f; group1.Condition = "[Purchasment.order_id]";//分组条件 DataBand data1 = new DataBand(); data1.Name = "Data1"; data1.Height = Units.Centimeters * 1.5f;//Units.Centimeters * 3f;//调的是data里面数据(即dataHeaderBand)的间距,也是table中row之间的间距 data1.DataSource = report.GetDataSource("Purchasment"); #region 分组表头 //GetDataBand(ref dataBand, ref dataHeaderBand); //TextObject txt2 = new TextObject(); //txt2.Name = "Text2"; //txt2.Bounds = new RectangleF(0, 0, Units.Centimeters * 20, Units.Centimeters * 3); //txt2.VertAlign = VertAlign.Center; //txt2.Font = new Font("宋体", 9, FontStyle.Bold); //txt2.Text = dataHeaderBand;//"订单号:[Purchasment.order_id]"; //group1.Objects.Add(txt2); //TextObject txt3 = new TextObject(); //txt3.Name = "Text3"; //txt3.Bounds = new RectangleF(Units.Centimeters * 8, 0, Units.Centimeters * 20, Units.Centimeters * 3); //txt3.VertAlign = VertAlign.Center; //txt3.Text = "申请药房:[Purchasment.storage_name]"; //group1.Objects.Add(txt3); ////<TextObject Name="Text38" Left="198.45" Top="18.9" Width="75.6" Height="28.35" Text="订单状态:" VertAlign="Center"/> //TextObject txt4 = new TextObject(); //txt4.Name = "Text4"; ////txt4.Bounds = new RectangleF(float.Parse("198.45"), float.Parse("18.9"), float.Parse("75.6"), float.Parse("28.35")); //txt4.Bounds = new RectangleF(Units.Centimeters * 15, 0, Units.Centimeters * 10, Units.Centimeters * 1); //txt4.VertAlign = VertAlign.Center; //txt4.Text = "采购科室:[Purchasment.sourceStorage]"; //group1.Objects.Add(txt4); #endregion //DataHeaderBand dataHeader1 = new DataHeaderBand(); //dataHeader1.Name = "DataHeader1"; //dataHeader1.Height = Units.Centimeters * 1; //data1.Objects.Add(dataHeader1); //GetDataBand(ref dataBand, ref dataHeaderBand); //TextObject txt6 = new TextObject(); //txt6.Name = "Text6"; //txt6.Bounds = new RectangleF(0, Units.Centimeters * 2, Units.Centimeters * 30, Units.Centimeters * 1); //txt6.Text = dataHeaderBand; //txt6.Font = new Font("宋体", 9, FontStyle.Bold); //dataHeader1.Objects.Add(txt6); ////group1.Objects.Add(txt6); //TextObject txt7 = new TextObject(); //txt7.Name = "Text7"; //txt7.Bounds = new RectangleF(0, Units.Centimeters * 3, Units.Centimeters * 30, Units.Centimeters * 1f); //txt7.Text = dataBand; //txt7.Font = new Font("宋体", 9); //data1.Objects.Add(txt7); #region Table表格 TableObject table1 = new TableObject(); table1.Name = "Table1"; table1.Border.Lines = BorderLines.All; table1.Height = Units.Centimeters * 1.5f; //table1.Width = Units.Centimeters * 30; #region TableColumn //TableColumn column1 = new TableColumn(); //column1.Name = "Column1"; //column1.Width = Units.Centimeters * 3; //table1.AddChild(column1);//AddChild应为添加子节点,适用于table内部 ////table1.ChildObjects.Add(column);//试过这种添加方式,不过这样就不显示表格了 //TableColumn column2 = new TableColumn(); //column2.Name = "Column2"; //column2.Width = Units.Centimeters * 3; //table1.AddChild(column2); //TableColumn column3 = new TableColumn(); //column3.Name = "Column3"; //column3.Width = Units.Centimeters * 3; //table1.AddChild(column3); //TableColumn column4 = new TableColumn(); //column4.Name = "Column4"; //column4.Width = Units.Centimeters * 3; //table1.AddChild(column4); //TableColumn column5 = new TableColumn(); //column5.Name = "Column5"; //column5.Width = Units.Centimeters * 3; //table1.AddChild(column5); //TableColumn column6 = new TableColumn(); //column6.Name = "Column6"; //column6.Width = Units.Centimeters * 3; //table1.AddChild(column6); #endregion TableRow row1 = new TableRow(); row1.Name = "Row1"; row1.Height = Units.Centimeters * 1.5f; table1.AddChild(row1); #region TableCell cell1 //TableCell cell1 = new TableCell(); //cell1.Name = "Cell1"; //cell1.HorzAlign = HorzAlign.Center; //cell1.VertAlign = VertAlign.Center; //cell1.Border.Lines = BorderLines.All; //cell1.Text = "[Purchasment.drug_name]"; //cell1.Font = new Font("宋体", 9); //row1.AddChild(cell1); //TableCell cell2 = new TableCell(); //cell2.Name = "Cell2"; //cell2.HorzAlign = HorzAlign.Center; //cell2.VertAlign = VertAlign.Center; //cell2.Border.Lines = BorderLines.All; //cell2.Text = "[Purchasment.package_spec]"; //cell2.Font = new Font("宋体", 9); //row1.AddChild(cell2); //TableCell cell3 = new TableCell(); //cell3.Name = "Cell3"; //cell3.HorzAlign = HorzAlign.Center; //cell3.VertAlign = VertAlign.Center; //cell3.Border.Lines = BorderLines.All; //cell3.Text = "[Purchasment.sale_price]"; //cell3.Font = new Font("宋体", 9); //row1.AddChild(cell3); //TableCell cell4 = new TableCell(); //cell4.Name = "Cell4"; //cell4.HorzAlign = HorzAlign.Center; //cell4.VertAlign = VertAlign.Center; //cell4.Border.Lines = BorderLines.All; //cell4.Text = "[Purchasment.manufacture_name]"; //cell4.Font = new Font("宋体", 9); //row1.AddChild(cell4); //TableCell cell5 = new TableCell(); //cell5.Name = "Cell5"; //cell5.HorzAlign = HorzAlign.Center; //cell5.VertAlign = VertAlign.Center; //cell5.Border.Lines = BorderLines.All; //cell5.Text = "[Purchasment.distributor_name]"; //cell5.Font = new Font("宋体", 9); //row1.AddChild(cell5); //TableCell cell6 = new TableCell(); //cell6.Name = "Cell6"; //cell6.HorzAlign = HorzAlign.Center; //cell6.VertAlign = VertAlign.Center; //cell6.Border.Lines = BorderLines.All; //cell6.Text = "[Purchasment.amount]"; //cell6.Font = new Font("宋体", 9); //row1.AddChild(cell6); #endregion SetDataHeaderAndTable(group1, page1.PaperWidth, table1, row1); data1.Objects.Add(table1); #endregion #region 报表底 page1.PageFooter = new PageFooterBand(); page1.PageFooter.Name = "PageFooter1"; page1.PageFooter.Height = Units.Centimeters * 1;//这个高度必须>=PageFooter包含文字的RectangleF里面的y的值 TextObject ftxt1 = new TextObject(); ftxt1.Name = "FText1"; ftxt1.Bounds = new RectangleF(0, Units.Centimeters * 1, Units.Centimeters * 10, Units.Centimeters * 1); ftxt1.Text = "打印时间:[Date]"; ftxt1.Font = new Font("宋体", 9); ftxt1.VertAlign = VertAlign.Center; page1.PageFooter.Objects.Add(ftxt1); TextObject ftxt2 = new TextObject(); ftxt2.Name = "FText2"; ftxt2.Bounds = new RectangleF(Units.Centimeters * 15, Units.Centimeters * 1, Units.Centimeters * 10, Units.Centimeters * 1); ftxt2.Text = "页码:[PageN]/[TotalPages#]"; ftxt2.Font = new Font("宋体", 9); ftxt2.VertAlign = VertAlign.Center; page1.PageFooter.Objects.Add(ftxt2); TextObject ftxt3 = new TextObject(); ftxt3.Name = "FText3"; ftxt3.Bounds = new RectangleF(Units.Centimeters * 8, Units.Centimeters * 1, Units.Centimeters * 10, Units.Centimeters * 1); ftxt3.Text = "打印人:[operator]"; ftxt3.Font = new Font("宋体", 9); ftxt3.VertAlign = VertAlign.Center; page1.PageFooter.Objects.Add(ftxt3); report.SetParameterValue("operator", SysConfig.UserCode); #endregion //group1.Objects.Add(data1); group1.Data = data1; page1.Bands.Add(group1); report.Pages.Add(page1); report.Show(); }
/// <summary> /// 根据当前显示的字段,动态添加数据首和表格 /// </summary> private void SetDataHeaderAndTable(GroupHeaderBand group1, float pageWidth, TableObject table1, TableRow row1) { int count = 0;//记录显示的列数 int index = 0; DataTable dt = OrderBL.SelectFreecombination(this.Name); if (dt != null) { for (int i = 0; i < dgv_apply_details.Columns.Count; i++) { if (dgv_apply_details.Columns[i].Visible) { count++; } } if (count <= 0) { YxMessageBox.ShowWarning("当前没有可打印的数据!"); return; } for (int i = 0; i < dt.Rows.Count; i++) { if (DbHelper.GetBool(dt.Rows[i], "print_status")) { TextObject text = new TextObject(); text.Name = "Text" + index.ToString(); text.Bounds = new RectangleF(0 + index * (3 * pageWidth / count), 0, 3 * pageWidth / count, Units.Centimeters * 3); text.VertAlign = VertAlign.Center; text.Font = new Font("宋体", 9, FontStyle.Bold); text.Text = DbHelper.GetString(dt.Rows[i], "header_text"); group1.Objects.Add(text); TableColumn column1 = new TableColumn(); column1.Name = "Column" + index.ToString(); ; column1.Width = 3 * pageWidth / count;//Units.Centimeters * 3; table1.AddChild(column1); TableCell cell1 = new TableCell(); cell1.Name = "Cell" + index.ToString(); ; cell1.HorzAlign = HorzAlign.Center; cell1.VertAlign = VertAlign.Center; cell1.Border.Lines = BorderLines.All; cell1.Text = "[Purchasment." + DbHelper.GetString(dt.Rows[i], "dataproperty_name") + "] "; cell1.Font = new Font("宋体", 9); row1.AddChild(cell1); index++; } } } }
打印效果如图: