一、打印效果
公共方法:
/// <summary> /// XRTable 表新增每行數據 /// </summary> /// <param name="xt">XRTable 表格對象</param> /// <param name="ds">數據表DataSet,這里只用到它下面的第二表(DataTable)ds.Tables[1]</param> /// <param name="ID">傳入的篩選條件</param> public void LoadPrintData(DevExpress.XtraReports.UI.XRTable xt, System.Data.DataSet ds, string ID) { //獲取報表對應的數據集DataSet; //賽選 單號 = ID 的每行數據 System.Data.DataRow[] dt = ds.Tables[1].Select("單號='" + ID + "'"); for (int i = xt.Rows.Count; i > 0; i--) { xt.Rows.Remove(xt.Rows[i]); } //遍歷System.Data.DataRow[] dt 每一行,然后為XRTable xt添加每行數據 for (int i = 0; i < dt.Length; i++) { XRTableRow xrRow = new XRTableRow(); for (int t = 0; t < xt.Rows[0].Cells.Count; t++) { XRTableCell xrRowCell = new XRTableCell(); xrRowCell.CanGrow = true; xrRowCell.CanShrink = true; xrRowCell.Font = xt.Rows[0].Cells[0].Font;//設置字體 xrRowCell.TextAlignment = xt.Rows[0].Cells[0].TextAlignment;// xrRowCell.Text = dt[i][xt.Rows[0].Cells[t].Text].ToString(); xrRowCell.Width = xt.Rows[0].Cells[t].Width; xrRowCell.Height = xt.Rows[0].Cells[t].Height; xrRowCell.BorderColor = xt.Rows[0].Cells[t].BorderColor; xrRowCell.Borders = DevExpress.XtraPrinting.BorderSide.All; xrRowCell.BorderWidth = xt.Rows[0].Cells[t].BorderWidth; //單元格的Padding值的設置 DevExpress.XtraPrinting.PaddingInfo padRight = new DevExpress.XtraPrinting.PaddingInfo(); padRight.Top = xt.Rows[0].Cells[0].Padding.Top; padRight.Bottom = xt.Rows[0].Cells[0].Padding.Bottom; padRight.Left = xt.Rows[0].Cells[0].Padding.Left; padRight.Right = xt.Rows[0].Cells[0].Padding.Right; xrRowCell.Padding = padRight; //XRTableRow行 添加單元格 xrRow.Cells.Add(xrRowCell); } //XRTable 添加行 xt.Rows.Add(xrRow); } }
二、代碼編輯
1 、table1 : table控件的Name;
2、label33 :label控件 實現綁定【外部平台單號】的控件;
3、label32:綁定【E店寶訂單編號】(S開頭的單號);
不同模板請以對應的控件Name屬性值類 來替換以上3個值(table1,label33,label32)
string tid = label32.Text;//綁定E店寶【訂單編號】(S開頭的單號); string OutTid = label33.Text;//綁定E店寶【外部平台單號】 //獲取報表對應的數據集DataSet; System.Data.DataSet ds=detailBand1.Report.DataSource as System.Data.DataSet; //如果獲取到了DataSet,並且Table數據是1個以上,則取索引是第1個的Table,此Table定義為是明細數據。 if (ds!=null && ds.Tables.Count>1) { System.Data.DataTable dt=ds.Tables[1]; //循環讀取Table中的每一個數據行形成明細的拼接字符串。 System.Data.DataView dv = dt.DefaultView; dv.Sort = "報價總金額 DESC , 條形碼 ASC "; //排序 System.Data.DataTable dt2 = dv.ToTable(); table1.Rows.Clear(); /***************************外部平台單號*********************************/ XRTableRow xrRowOutTid = new XRTableRow(); XRTableCell xrRowOutTidTile = new XRTableCell(); XRTableCell xrRowOutTidValue = new XRTableCell(); xrRowOutTidTile.Width = 160 ; xrRowOutTidValue.Width = 360 ; //-------------------------------------------- xrRowOutTidTile.CanGrow = true; xrRowOutTidTile.CanShrink = false; xrRowOutTidTile.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowOutTidTile.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; //-------------------------------------------- xrRowOutTidValue.CanGrow = true; xrRowOutTidValue.CanShrink = false; xrRowOutTidValue.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowOutTidValue.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; //-------------------------------------------- xrRowOutTidTile.Text = "訂單號"; xrRowOutTidValue.Text =OutTid;//外部平台單號 //-------------------------------------------- xrRowOutTid.Cells.Add(xrRowOutTidTile); xrRowOutTid.Cells.Add(xrRowOutTidValue); table1.Rows.Add(xrRowOutTid); /***************************發貨單號*********************************/ XRTableRow xrRowTid = new XRTableRow(); XRTableCell xrRowTidTitle = new XRTableCell(); XRTableCell xrRowTidValue = new XRTableCell(); xrRowTidTitle.Width = 160 ; xrRowTidValue.Width = 360 ; //-------------------------------------------- xrRowTidTitle.CanGrow = true; xrRowTidTitle.CanShrink = false; xrRowTidTitle.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowTidTitle.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; //-------------------------------------------- xrRowTidValue.CanGrow = true; xrRowTidValue.CanShrink = false; xrRowTidValue.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowTidValue.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; //-------------------------------------------- xrRowTidTitle.Text = "發貨單號"; xrRowTidValue.Text =tid; //-------------------------------------------- xrRowTid.Cells.Add(xrRowTidTitle); xrRowTid.Cells.Add(xrRowTidValue); table1.Rows.Add(xrRowTid); /***************************列標題*********************************/ XRTableRow xrRowTitle = new XRTableRow(); XRTableCell xrRowTitleName = new XRTableCell();//產品名稱 XRTableCell xrRowTitleHH = new XRTableCell();//貨號 XRTableCell xrRowTitleBarCode = new XRTableCell();//"條碼" XRTableCell xrRowTitleNum = new XRTableCell();//"數量" //----------------------------- xrRowTitleBarCode .CanGrow = true; xrRowTitleBarCode .CanShrink = false; xrRowTitleBarCode .Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowTitleBarCode .TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; //----------------------------- xrRowTitleHH.CanGrow = true; xrRowTitleHH.CanShrink = false; xrRowTitleHH.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowTitleHH.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; //----------------------------- xrRowTitleName.CanGrow = true; xrRowTitleName.CanShrink = false; xrRowTitleName.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowTitleName.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; xrRowTitleHH.Width = 160 ; xrRowTitleName.Width = 300 ; xrRowTitleNum.Width = 60 ; xrRowTitleBarCode.Width = 160 ; //----------------------------- xrRowTitleNum.CanGrow = true; xrRowTitleNum.CanShrink = false; xrRowTitleNum.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrRowTitleNum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; //----------------------------- xrRowTitleName.Text = "產品名稱"; xrRowTitleHH.Text = "貨號"; xrRowTitleBarCode.Text = "條碼"; xrRowTitleNum.Text = "數量" ; //----------------------------- xrRowTitle.Cells.Add(xrRowTitleName);//"產品名稱" xrRowTitle.Cells.Add(xrRowTitleHH);//"貨號" xrRowTitle.Cells.Add(xrRowTitleBarCode); //產品條形碼 xrRowTitle.Cells.Add(xrRowTitleNum);//數量 table1.Rows.Add(xrRowTitle); /***************************循環添加明細*********************************/ for(int rowIndex=0;rowIndex<dt2.Rows.Count;rowIndex++) { if (dt2.Rows[rowIndex]["訂單編號"].ToString()==tid ) { XRTableRow xrForRow = new XRTableRow(); XRTableCell xrForRowSPC = new XRTableCell();//軟件規格 XRTableCell xrForRowRem = new XRTableCell();//產品備注 XRTableCell xrForRowNum = new XRTableCell();//訂貨數量 XRTableCell xrForRowBarCode = new XRTableCell();//條形碼 //-------------------------------------- xrForRowBarCode .CanGrow = true; xrForRowBarCode.CanShrink = false; xrForRowBarCode.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrForRowBarCode.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; //------------------------------------- xrForRowSPC.CanGrow = true; xrForRowSPC.CanShrink = false; xrForRowSPC.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrForRowSPC.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; //------------------------------------- xrForRowRem.CanGrow = true; xrForRowRem.CanShrink = false; xrForRowRem.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrForRowRem.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; xrForRowSPC.Width = 160 ; xrForRowRem.Width = 300 ; xrForRowNum.Width = 60 ; xrForRowBarCode.Width = 160 ; //------------------------------------- xrForRowNum.CanGrow = true; xrForRowNum.CanShrink = false; xrForRowNum.Font = new System.Drawing.Font("微軟雅黑", 8F, System.Drawing.FontStyle.Bold); xrForRowNum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; //------------------------------------- xrForRowSPC.Text = dt2.Rows[rowIndex]["軟件規格"].ToString(); xrForRowRem.Text = dt2.Rows[rowIndex]["產品備注"].ToString() ; xrForRowNum.Text = dt2.Rows[rowIndex]["訂貨數量"].ToString() ; xrForRowBarCode.Text = dt2.Rows[rowIndex]["條形碼"].ToString() ; //------------------------------------- xrForRowSPC.WordWrap = true; xrForRow.Cells.Add(xrForRowRem);// xrForRow.Cells.Add(xrForRowSPC); //軟件規格 xrForRow.Cells.Add(xrForRowBarCode); // xrForRow.Cells.Add(xrForRowNum);// //------------------------------------- table1.Rows.Add(xrForRow); } } }
三、添加行列的公共方法
/// <summary> /// 替換特殊字符 /// </summary> /// <param name="str"></param> /// <returns></returns> public string ReStr(string str) { return str.Replace(";", ".").Replace(",", ".").Replace(";", ".").Replace(",", "."); } /// <summary> /// 添加行 /// </summary> /// <param name="table1">DevExpress.XtraReports.UI.XRTable 對象</param> /// <param name="RowsStr">格式:"文本,寬度,字體大小,字體,是否加粗,對其方式:左、右、中;";</param> public void TableAddRow(DevExpress.XtraReports.UI.XRTable table1, string RowsStr) { RowsStr = RowsStr.Replace(";", ";").Replace(",", ","); string[] Zstr = RowsStr.Split(';'); string 文本 = "", 寬度 = "100", 字體大小 = "8F", 字體 = "微軟雅黑", 是否加粗 = "否",對其方式="左"; XRTableRow xrRow = new XRTableRow(); for (int i = 0; i < Zstr.Length; i++) { 文本 = Zstr[i].Split(',')[0]; 寬度 = Zstr[i].Split(',')[1].Replace(" ", ""); 字體大小 = Zstr[i].Split(',')[2].Replace(" ", ""); 字體 = Zstr[i].Split(',')[3].Replace(" ", "");//"微軟雅黑" 是否加粗 = Zstr[i].Split(',')[4].Replace(" ",""); 對其方式 = Zstr[i].Split(',')[5].Replace(" ",""); //--------------------------------- float f字體大小 = float.Parse(字體大小); //--------------------------------- XRTableCell xrRowCell = new XRTableCell(); xrRowCell.CanGrow = true; xrRowCell.CanShrink = false; xrRowCell.Width = Convert.ToInt32(寬度); //--------------------------------- //---是否加粗 System.Drawing.FontStyle fstyle = System.Drawing.FontStyle.Bold; if (是否加粗 == "否") { fstyle = System.Drawing.FontStyle.Regular; } //--------------------------------- xrRowCell.Font = new System.Drawing.Font(字體, f字體大小, fstyle); //--------------------------------- //對其方式 DevExpress.XtraPrinting.TextAlignment txtalign = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; if (對其方式=="左") { txtalign = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; } if (對其方式 == "右") { txtalign = DevExpress.XtraPrinting.TextAlignment.MiddleRight; } if (對其方式 == "中") { txtalign = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; } xrRowCell.TextAlignment = txtalign; //----------------------------------- xrRowCell.Text = 文本; xrRow.Cells.Add(xrRowCell);//"產品名稱" } table1.Rows.Add(xrRow); }
調用:
/***************************外部平台單號*********************************/ TableAddRow(table1, "訂單號,160,16,微軟雅黑,是,左;"+OutTid+",360,16,微軟雅黑,是,左"); /***************************發貨單號*********************************/ TableAddRow(table1, "發貨單號,160,16,微軟雅黑,是,左;"+tid+",360,16,微軟雅黑,是,左"); /***************************列標題*********************************/ TableAddRow(table1, "產品名稱,300,8,微軟雅黑,是,左;"//第一列 +"貨號,160,8,微軟雅黑,是,左;"//第二列 +"條碼,160,8,微軟雅黑,是,左;"//第三列 +"數量,60,8,微軟雅黑,是,中"//第四列 );
通用方法調用:
private void label13_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { string tid = GetCurrentColumnValue("訂單編號").ToString();//綁定E店寶【訂單編號】(S開頭的單號); string OutTid = GetCurrentColumnValue("外部平台單號").ToString();// label33.Text;//綁定E店寶【外部平台單號】 //獲取報表對應的數據集DataSet; System.Data.DataSet ds=detailBand1.Report.DataSource as System.Data.DataSet; //如果獲取到了DataSet,並且Table數據是1個以上,則取索引是第1個的Table,此Table定義為是明細數據。 if (ds!=null && ds.Tables.Count>1) { System.Data.DataTable dt=ds.Tables[1]; //循環讀取Table中的每一個數據行形成明細的拼接字符串。 System.Data.DataView dv = dt.DefaultView; dv.Sort = "報價總金額 DESC , 條形碼 ASC "; //排序 System.Data.DataTable dt2 = dv.ToTable(); table1.Rows.Clear(); //"文本,寬度,字體大小,字體,是否加粗,對其方式:左、右、中"; //TableAddRowBarCode(table1, "快遞單號,160,16,微軟雅黑,是,左",barCode1); /***************************外部平台單號*********************************/ TableAddRow(table1, "訂單號,160,16,微軟雅黑,是,左;"+OutTid+",360,16,微軟雅黑,是,左"); /***************************發貨單號*********************************/ TableAddRow(table1, "發貨單號,160,16,微軟雅黑,是,左;"+tid+",360,16,微軟雅黑,是,左"); /***************************列標題*********************************/ TableAddRow(table1, "產品名稱,300,8,微軟雅黑,是,左;"//第一列 +"貨號,160,8,微軟雅黑,是,左;"//第二列 +"條碼,160,8,微軟雅黑,是,左;"//第三列 +"數量,60,8,微軟雅黑,是,中"//第四列 ); /***************************循環添加明細*********************************/ for(int rowIndex=0;rowIndex<dt2.Rows.Count;rowIndex++) { if (dt2.Rows[rowIndex]["訂單編號"].ToString()==tid ) { string 軟件規格 = dt2.Rows[rowIndex]["軟件規格"].ToString();軟件規格 = ReStr(軟件規格); string 產品備注 = dt2.Rows[rowIndex]["產品備注"].ToString() ;產品備注 = ReStr(產品備注); string 訂貨數量 = dt2.Rows[rowIndex]["訂貨數量"].ToString() ; string 條形碼 = dt2.Rows[rowIndex]["條形碼"].ToString() ; TableAddRow(table1, 產品備注 + ",300,8,微軟雅黑,是,左;"//第一列產品名稱 +軟件規格+",160,8,微軟雅黑,是,左;"//第二列貨號 +條形碼+",160,8,微軟雅黑,是,左;"//第三列條碼 +訂貨數量+",60,8,微軟雅黑,是,中"//第四列數量 ); } } } }
方法2:
在工具欄 拖拽 一個 table 到模板上面,然后添加列,每列的內容填寫數據源字段名稱,不要填寫數據源字段,否則打印出錯!
public void LoadPrintData(DevExpress.XtraReports.UI.XRTable xt, System.Data.DataSet ds) { //獲取報表對應的數據集DataSet; System.Data.DataTable dt = ds.Tables[1]; for (int i = 0; i < dt.Rows.Count; i++) { XRTableRow xrRow = new XRTableRow(); for (int t = 0; t < xt.Rows[0].Cells.Count; t++) { XRTableCell xrRowCell = new XRTableCell(); xrRowCell.Font = xt.Rows[0].Cells[0].Font;//字體樣式采用行首的字體樣式 xrRowCell.TextAlignment = xt.Rows[0].Cells[0].TextAlignment;//對齊方式同上 xrRowCell.Text = dt.Rows[i][xt.Rows[0].Cells[t].Text].ToString();//獲取數據源字段數據 xrRowCell.Width = xt.Rows[0].Cells[t].Width; xrRow.Cells.Add(xrRowCell);//"產品名稱" } xt.Rows.Add(xrRow); } }
public void LoadPrintData(DevExpress.XtraReports.UI.XRTable xt, System.Data.DataSet ds) { //獲取報表對應的數據集DataSet; System.Data.DataTable dt = ds.Tables[1]; for (int i = 0; i < dt.Rows.Count; i++) { XRTableRow xrRow = new XRTableRow(); for (int t = 0; t < xt.Rows[0].Cells.Count; t++) { XRTableCell xrRowCell = new XRTableCell(); xrRowCell.Font = xt.Rows[0].Cells[0].Font; xrRowCell.TextAlignment = xt.Rows[0].Cells[0].TextAlignment; xrRowCell.Text = dt.Rows[i][xt.Rows[0].Cells[t].Text].ToString(); xrRowCell.Width = xt.Rows[0].Cells[t].Width; xrRowCell.BorderColor = xt.Rows[0].Cells[t].BorderColor; xrRowCell.Borders = DevExpress.XtraPrinting.BorderSide.All; xrRowCell.BorderWidth = xt.Rows[0].Cells[t].BorderWidth; xrRow.Cells.Add(xrRowCell);//"產品名稱" } xt.Rows.Add(xrRow); } }
private void detailBand1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { //獲取報表對應的數據集DataSet; System.Data.DataSet ds=detailBand1.Report.DataSource as System.Data.DataSet; string ID = GetCurrentColumnValue("ID").ToString(); LoadPrintData(table2, ds,ID); } public void LoadPrintData(DevExpress.XtraReports.UI.XRTable xt, System.Data.DataSet ds,string ID) { //獲取報表對應的數據集DataSet; System.Data.DataRow[] dt = ds.Tables[1].Select("ID='" + ID+ "'"); for (int i = 0; i < dt.Length;i++ ) { XRTableRow xrRow = new XRTableRow(); for (int t = 0; t < xt.Rows[0].Cells.Count; t++) { XRTableCell xrRowCell = new XRTableCell(); xrRowCell.CanGrow = true; xrRowCell.CanShrink = true; xrRowCell.Font = xt.Rows[0].Cells[0].Font; xrRowCell.TextAlignment = xt.Rows[0].Cells[0].TextAlignment; xrRowCell.Text = dt[i][xt.Rows[0].Cells[t].Text].ToString(); xrRowCell.Width = xt.Rows[0].Cells[t].Width; xrRowCell.BorderColor = xt.Rows[0].Cells[t].BorderColor; xrRowCell.Borders = DevExpress.XtraPrinting.BorderSide.All; xrRowCell.BorderWidth = xt.Rows[0].Cells[t].BorderWidth; xrRow.Cells.Add(xrRowCell);//"產品名稱" } xt.Rows.Add(xrRow); } }
顯示效果圖: