C#打印模板設計,E店寶打印模板設置,winfrom打印模板設計,DevExpress.XtraReports.UI.XRTable 表格代碼生成。


一、打印效果

 公共方法:

         /// <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);
            }
        }

 

 

 

顯示效果圖:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM