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

打印后生成的数据模板

在数据库配置表

表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;  //临时变量存入列A\B\C

            //遍历行
            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();
            }

        }
    }

  

时间: 2024-11-05 05:32:46

根据模板打印所有数据动态配置的相关文章

arcgis api for js入门开发系列二十一气泡窗口信息动态配置模板

前面地图查询篇实现图层查询query功能,但是查询结果的气泡窗口展示信息是在代码写死绑定图层的字段来的,比如name属性字段对应的值.但是这种实现方式很不灵活,对于图层字段不变的情况下或者多个图层字段名称都是一致情况下,还好,代码也不用变动:要是图层字段新增或者删除以及多个图层的字段不一致情况下,每次改动,查询结果的js代码也要对应的修改,对于维护来说,挺不方便的.所以,本篇优化一下气泡窗口的信息模板,采取动态可配置化图层字段方式,在配置文件里面配置好图层需要展示的字段模板,比如在mapconf

Quartz 在 Spring 中如何动态配置时间--转

原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间,非常easy.比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好. Spring配置文件 引用 <bean id="jobDetail&quo

Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)),maven.kubectl 等容器工具需要在 KubernetesPod.yaml 中定义,存放在代码中,比较繁琐. 这里采用 Jenkinsfile + docker in docker 方式进行部署,把 maven 等工具都运行在 docker 容器中,这样减少了 yaml 文

Vue项目零碎知识(全局js,css配置,element-UI,bs使用, img动态配置,js数组)

全局css样式,首先在静态assets中写好文件,然后要在main.js中配置 // 配置全局css样式 // import '@/assets/css/global.css' require('@/assets/css/global.css') //上面两种都可以实现全局样式的导入,但是第二种容错率较好,更健壮,比较常用,第一种对环境要求比较高 全局js样式,也是首先要在静态assets文件中写好,然后再main.js中进行配置 // main.js //配置全局settings.js imp

使用DHCP动态配置主机地址

前言: DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,在网络中架设一台专用的DHCP服务器,负责集中分配各种网络地址参数. DHCP协议相关的数据包:RARP→discovery→offer→request→ack 实验环境:Centos6.5,配置好本地yum仓库 Server:192.168.1.1 Client1:DHCP获得地址 client2:获得DHCP保留地址192.168.1.10 服务端配置:↓↓ [[email prote

各式结构化数据 动态 接入-存储-查询 的处理办法 (第二部分)

各式结构化数据的动态接入存储查询,这一需求相信有很多人都遇到过,随着实现技术路线选择的不同,遇到的问题出入大了,其解决办法也是大相径庭.数据存储在哪儿,是关系型数据库,还是NoSQL数据库,是MySQL还是Oracle,怎么建立索引,建立什么类型的索引,都是大学问.下面,我要把我对这一解决办法的思考总结一下,有成熟的也有不成熟的,希望大家一起共同探讨. 关键词:结构化数据, 动态, 接入, 存储, 查询 首先,我们得定义一下在本文中什么是结构化数据,这里的结构化数据主要是指扁平化的.可以由基础数

Spring动态配置多数据源

Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据. 基本信息 1.Spring配置多数据源的方式和具体使用过程. 2.Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况: 一是,表级上的跨数据库.即,对于不同的数据库却有相同的表(表名和表结构完全相

按模板打印word防止并发操作

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

Quartz动态配置表达的方法

在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间,非常easy.比如:每天凌晨几点定时运行一个程序,这只要在工程中的spring配置文件中配置好spring整合quartz的几个属性就好. Spring配置文件 Xml代码?? <bean?id="jobDetail"?class="org.springframework.