• 根据模板打印所有数据动态配置


    打印后生成的数据模板

    在数据库配置表

    表1记录 块项 数据库表如下

    表2记录 布局行列中的数据项值,取什么数据,我这里是从TextBox中的取值,所以我记录的是Tag

    详细代码如下

     public FrmSQ410()
            {
                InitializeComponent();
                gvTemp.OptionsBehavior.Editable = gvSlab.OptionsBehavior.Editable=false;
                date1.EditValue = DateTime.Now.Date.AddHours(0).AddMinutes(0).AddSeconds(0);
                date2.EditValue = DateTime.Now.Date.AddDays(1).AddHours(23).AddMinutes(59).AddSeconds(59);
                txtLen.TextChanged += txtLen_TextChanged;
                tsbPrintBindingSource.PositionChanged += tsbPrintBindingSource_PositionChanged;
    
                gvSlab.RowClick += gvSlab_RowClick;
    
             
            }
    
            void txtLen_TextChanged(object sender, EventArgs e)
            { 
                double wgt = Math.Round((Convert.ToDouble(txtLen.Text.Trim()) / 1000) * WgtMeter, 3);
                txtWgt.Text = string.Format("{0}", wgt*1000);
    
            }
    
            void gvSlab_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
            {
    
                if (e.RowHandle < 0) return;
                var row = gvSlab.GetDataRow(e.RowHandle); 
                txtStove.Text=row["炉号"].ToString();
                txtStlGrd.Text=row["钢种"].ToString();
                txtSpec.Text = row["规格"].ToString();
                txtStdCode.Text = row["执行标准"].ToString(); 
                txtLen.Text = row["长度"].ToString();
                txtNumTotal.Text = row["支数"].ToString();
                txtProdDate.Text =Convert.ToDateTime( row["生产日期"]).ToString("yyyy.MM.dd");
                txtWgt.Text = string.Format("{0}", Convert.ToDouble(row["重量"]) * 1000);
                WgtMeter = Convert.ToDouble(row["米重"]);
    
    
    
            }
    
            void tsbPrintBindingSource_PositionChanged(object sender, EventArgs e)
            {
                if (tsbPrintBindingSource.Current == null) return;
                var current = tsbPrintBindingSource.Current as RMES.IBatisEntity.TsbPrint;
                if (lst_TsbPrintItemAll != null)
                    lst_TsbPrintItem = lst_TsbPrintItemAll.Where(m => m.CPid == current.CId).OrderBy(m => m.CRowIdx).ToList();
            }
    
    
            Spire.Xls.Core.IWorksheet worksheet = null;
            Workbook workbook = null;
    
            private string Plant = string.Empty;
             
            private string fileSavePath = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "PrintGP.xls");
    
            private List<RMES.IBatisEntity.TsbPrintItem> lst_TsbPrintItemAll = null;
    
            private List<RMES.IBatisEntity.TsbPrintItem> lst_TsbPrintItem = null;
    
            List<Control> lstText = new List<Control>();
    
    
            private double WgtMeter = 0;
    
    
            private void InitLayoutText()
            {
    
                foreach(Control ctrl in layoutControl1.Controls)
                {
                    if (ctrl is DevExpress.XtraEditors.BaseEdit&&ctrl.Tag!=null )
                    {
                        lstText.Add(ctrl);
                    }
                }
            }
            private void FrmSQ410_Load(object sender, EventArgs e)
            { 
                txtGroup.Text = RMES.BLL.ShiftInfo.Instance.Team;
    
                InitTemplate();
                InitLayoutText();
                 
    
            }
    
            private void InitTemplate()
            {
                var lst_TsbPrint = RMES.IBatisEntity.TsbPrintList.GetAll();
                tsbPrintBindingSource.DataSource = lst_TsbPrint;
                gvTemp.BestFitColumns();
    
                //获取所有
    
                lst_TsbPrintItemAll = RMES.IBatisEntity.TsbPrintItemList.GetAll().ToList();
    
                if (lst_TsbPrint != null)
                {
                    var item = lst_TsbPrint.FirstOrDefault();
    
                    lst_TsbPrintItem = lst_TsbPrintItemAll.Where(m => m.CPid == item.CId).OrderBy(m => m.CRowIdx).ToList();
                }
    
            }
    
            private void QueryPrintSet()
            {
    
            }
            /// <summary>
            /// 字母转阿斯特码
            /// </summary>
            /// <param name="c"></param>
            /// <returns></returns>
            private int CharacterToASCI(string c)
            {
                byte[] array = new byte[1];   //定义一组数组array
                array = System.Text.Encoding.ASCII.GetBytes(c); //string转换的字母
                int asciicode = (short)(array[0]);
    
                return asciicode;
            }
    
            private string ASIToCharacter(int a)
            {
                string c = string.Empty;
                byte[] array = new byte[1];
                array[0] = (byte)(Convert.ToInt32(a)); //ASCII码强制转换二进制
                c = Convert.ToString(System.Text.Encoding.ASCII.GetString(array));
    
                return c;
            }
    
    
            private int start_Num = 1;
            //获取值
            private string getVal(int col,int row)
            {
    
                //开始支数,总支数,
    
                string rs = string.Empty;
    
                var item = lst_TsbPrintItem.Where(m => m.CRowIdx == row && m.CColIdx == col).FirstOrDefault(); 
                //获取值
                if(item !=null)
                { 
                   if (item.CFiledName == "支数")
                   {
                        
                       rs = string.Format("{0}-{1}",txtNumTotal.Text.Trim(),start_Num++);
                   }
                   else
                   {
                       var ctrl = lstText.Where(m => m.Tag.ToString() == item.CFiledName).FirstOrDefault();
    
                       rs = ctrl.Text.Trim();
                   }
                  
                }
                return rs;
    
            }
    
            private void btnPrint_Click(object sender, EventArgs e)
            {
    
                if (tsbPrintBindingSource.Current == null) return;
    
    
                var item_TbPrintSet = tsbPrintBindingSource.Current as RMES.IBatisEntity.TsbPrint;
    
                string fileTempPath = Path.Combine(Environment.CurrentDirectory, item_TbPrintSet.CWorkName);
    
                if (!File.Exists(fileTempPath))
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show(string.Format("模板{0}文件不存在", item_TbPrintSet.CWorkName), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
    
                workbook = new Workbook();
                if (!string.IsNullOrEmpty(item_TbPrintSet.CPwd.Trim()))
                {
                    workbook.OpenPassword = item_TbPrintSet.CPwd;
                }
    
                workbook.LoadFromFile(fileTempPath);
    
                worksheet = workbook.Worksheets.Where(m => m.Name == item_TbPrintSet.CSheetName).FirstOrDefault();
    
                if (worksheet == null)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show(string.Format("模板文件中Sheet{0}不存在", item_TbPrintSet.CSheetName), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
    
                //移除其它数据
    
                List<Spire.Xls.Core.IWorksheet> lstsheet = new List<Spire.Xls.Core.IWorksheet>();
                workbook.Worksheets.All(m => { if (m.Name != item_TbPrintSet.CSheetName) { lstsheet.Add(m); } return true; });
    
    
                lstsheet.All(m => { m.Remove(); return true; });
    
    
                //判定条件
                if (lst_TsbPrintItem == null)
                {
    
                    DevExpress.XtraEditors.XtraMessageBox.Show("模板数据项目没有配置", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
    
                if (lst_TsbPrintItem.Count == 0)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show("模板数据项目没有配置", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
    
                if (lst_TsbPrintItem.Where(m => string.IsNullOrEmpty(m.CFiledName)).Count() > 0)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show("模板数据映射中有映射列为空数据", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
    
                if (DevExpress.XtraEditors.XtraMessageBox.Show(string.Format("是否打印模板{0} ?", item_TbPrintSet.CSheetName ), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return;
    
                ///初始化开始支数
                if (!string.IsNullOrEmpty(txtNumStart.Text.Trim()))
                {
                    start_Num = Convert.ToInt32(txtNumStart.Text.Trim());
                }
                //生成打印数据 
                int rows_item = lst_TsbPrintItem.Count;
    
    
                int rows = 0; //几行几列
                int cols = 0;
    
                int rowStart = 0; //从几开开始
                int colStart = 0;
               
                int rowSpan = 0; //列间隔
                int colSpan = 0;
    
                string lenChar = string.Empty;//规格分隔符
    
    
                rows = Convert.ToInt32(item_TbPrintSet.CRow);
                cols = Convert.ToInt32(item_TbPrintSet.CCol);
    
    
    
              
                rowStart = Convert.ToInt32(item_TbPrintSet.CRowStart);//行开始
    
                colStart = Convert.ToInt32(item_TbPrintSet.CColStart);//列开始
    
                rowSpan = Convert.ToInt32(item_TbPrintSet.CRowSpan); //行间隔
    
                colSpan = Convert.ToInt32(item_TbPrintSet.CColSpan); //列间隔
            
                int n = 65; //从A开始
    
                int index = 1; //从1行开始
    
                n += colStart; //从A B C 开始
    
                index += rowStart;
    
    
                int nl = n;  //临时变量存入列ABC
    
                //遍历行
                for (int i = 0; i < rows; i++)
                { 
                    nl = n; 
                    //遍历列
                    for (int k = 0; k < cols; k++)
                    { 
                        //遍历设置单元格
                        for (int i_row = 0; i_row < item_TbPrintSet.CLrow; i_row++)
                        { 
                            for (int i_col = 0; i_col < item_TbPrintSet.CLcol; i_col++)
                            {
                                string range = string.Format("{0}{1}", ASIToCharacter(nl + i_col), index+i_row);
                                 
                                string val = getVal(i_col, i_row);
                                if (!string.IsNullOrEmpty(val))
                                {
                                    worksheet.Range[range].Text = val;
                                }  
                            } 
                           
                        }
    
                        nl += colSpan + (int)item_TbPrintSet.CLcol;   //Excel //A B C D 
                    } 
                    index += rowSpan + (int)item_TbPrintSet.CLrow;  
                }
    
                workbook.SaveToFile(fileSavePath);
    
                worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;
                worksheet.PageSetup.PrintQuality = 2;
                PrintDocument pd = workbook.PrintDocument;
    
                pd.Print();
            }
    
            private void btnRefush_Click(object sender, EventArgs e)
            {
                InitTemplate();
            }
    
            private void btnQuery_Click(object sender, EventArgs e)
            {
    
    
                string Sql = string.Format(" SELECT TA. C_BATCH_NO 炉号, TA.C_GB_STL_GRD   钢种, TA.C_SPEC      规格, TA.N_LEN       长度, SUM(Ta.N_QUA)OVER(PARTITION BY TA.C_BATCH_NO)支数, TA.C_STD_CODE  执行标准, TA.N_WGT_METER 米重, TA.N_WGT       重量,TA.D_TRANS_DATE 生产日期, TA.C_CUS_NAME  客户 FROM (SELECT T.C_BATCH_NO, SUM(T.N_QUA) N_QUA,MAX(T.D_TRANS_DATE)D_TRANS_DATE, T.C_CUS_NAME, T.C_GB_STL_GRD, T.C_SPEC, T.N_LEN, T.C_STD_CODE, T.N_WGT_METER, T.N_WGT FROM RMES.TSC_SLAB_MAIN T WHERE T.C_SLAB_TYPE = 'S' AND T.C_REFINE = '0' AND T.C_REFINE_NUM = '0' AND T.C_MAT_TYPE IN ('1', '4') AND T.C_STOVE  LIKE '%{0}%'  AND T.D_TRANS_DATE BETWEEN  TO_DATE('{1}','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('{2}','YYYY-MM-DD HH24:MI:SS') GROUP BY T.C_BATCH_NO, T.C_GB_STL_GRD, T.C_SPEC, T.N_LEN, T.C_STD_CODE, T.N_WGT_METER, T.N_WGT, T.C_CUS_NAME) TA ", txtStoveQuery.Text.Trim(), date1.Text.Trim(), date2.Text.Trim()); 
    
                QueryResult(Sql, gcSlab, gvSlab);
    
    
            }
    
    
            private void QueryResult(string Sql, DevExpress.XtraGrid.GridControl gridCtrl, DevExpress.XtraGrid.Views.Grid.GridView grid)
            {
    
                using (BackgroundWorker bk = new BackgroundWorker())
                {
                    bk.DoWork += (x, y) =>
                    {
    
                        DataTable tb_Rs = RV.BLL.Base.SqlService.ExecuteQuery(Sql);
                        y.Result = tb_Rs;
                    };
                    bk.RunWorkerCompleted += (m, n) =>
                    {
    
                        if (n.Result != null)
                        {
                            var tb_Rs = n.Result as DataTable;
                            grid.Columns.Clear();
                            gridCtrl.DataSource = tb_Rs;
                            gridCtrl.RefreshDataSource();
                            grid.OptionsBehavior.ReadOnly = true;
                            //grid.OptionsView.ShowFooter = true;
    
                            foreach (GridColumn col in grid.Columns)
                            {
    
                                col.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near; 
                                if (col.FieldName.Contains("ID"))
                                {
                                    col.Visible = false;
                                } 
                                else if (col.ColumnType == typeof(DateTime))
                                {
                                    col.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
                                    col.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
                                }
                            }
    
                            grid.BestFitColumns();
    
                        }
                    };
                    bk.RunWorkerAsync();
                }
    
            }
        }
    

      

  • 相关阅读:
    SEO(Business)
    C#数组去掉重复的元素
    文件创建与文件格式的修改
    Filter(20160815)
    OmniGraffle导入stencils的两个方法以及优质的stencils下载网站推荐
    在Axure RP 8.0 中使用 Font Awesome 图标库完成设计并能在其他未安装该字体的电脑离线预览的方法
    社会性动物(艾略特•阿伦森)
    MacTex 在XeLaTex编译状态下插入的pdf格式图片无法显示问题的解决方案
    Markdown,别来无恙!
    男人来自火星 女人来自金星(约翰·格雷)
  • 原文地址:https://www.cnblogs.com/Chareree/p/6192721.html
Copyright © 2020-2023  润新知