From cab2bb840a76ee718e8d94b53c9c9aebf4974c50 Mon Sep 17 00:00:00 2001 From: wendy <408182087@qq.com> Date: Tue, 28 Apr 2026 09:46:17 +0800 Subject: [PATCH] =?UTF-8?q?20260428=20=E9=A1=B9=E7=9B=AE=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E9=87=8F=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../版本日志/HJGLDB_DS_2026-04-28_bwj.sql | 155 +++++++++++++++ HJGL_DS/BLL/Common/Const.cs | 5 + .../Fastreport/JGZL/无损检测人员登记表.frx | 4 +- .../Word/JGZL/合格焊工登记表导出模板.docx | Bin 21725 -> 21626 bytes .../Word/JGZL/无损检测人员登记表导出模板.docx | Bin 0 -> 14609 bytes .../HJGL/WeldingReport/IsoCmprehensive.aspx | 7 +- HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx | 3 + HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.cs | 179 +++++++++++++++++- .../JGZL/NDTPerson.aspx.designer.cs | 9 + .../FineUIPro.Web/JGZL/QualifiedWelder.aspx | 1 + .../JGZL/QualifiedWelder.aspx.cs | 133 ++++++------- .../JGZL/QualifiedWelder.aspx.designer.cs | 9 + 12 files changed, 415 insertions(+), 90 deletions(-) create mode 100644 DataBase/版本日志/HJGLDB_DS_2026-04-28_bwj.sql create mode 100644 HJGL_DS/FineUIPro.Web/File/Word/JGZL/无损检测人员登记表导出模板.docx diff --git a/DataBase/版本日志/HJGLDB_DS_2026-04-28_bwj.sql b/DataBase/版本日志/HJGLDB_DS_2026-04-28_bwj.sql new file mode 100644 index 0000000..2e701b9 --- /dev/null +++ b/DataBase/版本日志/HJGLDB_DS_2026-04-28_bwj.sql @@ -0,0 +1,155 @@ + + +ALTER PROC [dbo].[HJGL_sp_rpt_iso_analyze] + @unitNo VARCHAR(400) = NULL, + @isono VARCHAR(100) = NULL, + @steel varchar(50) = NULL, + @projectId NVARCHAR(50) = NULL, + @StartDate datetime =null, + @EndDate datetime =null +AS +/*ӹͳ ܴ޸2020.03.06*/ +SELECT iso.ProjectId,iso.ISO_IsoNo,iso.PressureTestPackageNo,Unit.UnitCode AS bsu_unitcode, --λ + Unit.UnitName AS bsu_unitname, --λ + Project.ProjectCode as projectCode, --ʩ + Project.ProjectName as projectName, --Ŀ + ''+cast(cast(ISO_Dia as FLOAT) as nvarchar(50))+''+cast(cast(ISO_Sch as FLOAT) as nvarchar(50)) as IsoDesc, -- + v.ISO_ID,v.total_jot,v.total_din, + ISNULL(v1.finished_total_jot,0) AS finished_total_jot, + ISNULL(v1.finished_total_din,0) AS finished_total_din,v1.maxdate, + ISNULL(v1.total_film,0) AS total_film, + ISNULL(v1.pass_film,0) AS pass_film, + CAST(CASE ISNULL(v1.total_film ,0) WHEN 0 THEN 0 + ELSE 1.0*ISNULL(v1.pass_film,0) / (1.0 * v1.total_film) END AS DECIMAL(19,3)) + AS passrate, --ںϸ + ISNULL(v2.point_jot,0) AS point_jot, + ISNULL(v2.point_total_film,0) AS point_total_film, + ISNULL(v2.point_pass_film,0) AS point_pass_film, + CAST(CASE ISNULL(v2.point_total_film ,0) WHEN 0 THEN 0 + ELSE 1.0*ISNULL(v2.point_pass_film,0) / (1.0 * v2.point_total_film) END AS DECIMAL(19,3)) + AS point_passrate, --ںϸ + + ISNULL(v3.ext_jot,0) AS ext_jot, + ISNULL(v3.ext_total_film,0) AS ext_total_film, + ISNULL(v3.ext_pass_film,0) AS ext_pass_film, + CAST(CASE ISNULL(v3.ext_total_film ,0) WHEN 0 THEN 0 + ELSE 1.0*ISNULL(v3.ext_pass_film,0) / (1.0 * v3.ext_total_film) END AS DECIMAL(19,3)) + AS point_passrate, --͸ϸ + (ISNULL(v2.point_jot,0)+ISNULL(v3.ext_jot,0)) AS check_total_jot, + ISNULL(v4.total_repairjot,0) AS total_repairjot, + ISNULL(v5.trust_total_jot,0) AS trust_total_jot, + CAST(CASE ISNULL(v.total_jot,0) WHEN 0 THEN 0 + ELSE 1.0*ISNULL(v2.point_jot,0) / (1.0 * v.total_jot) END AS DECIMAL(19,3)) + AS trustrate, --ίб + CAST(CASE ISNULL(v.total_jot,0) WHEN 0 THEN 0 + ELSE 1.0*(ISNULL(v3.ext_jot,0) + ISNULL(v2.point_jot,0)) / (1.0 * v.total_jot) + END AS DECIMAL(19,3)) + AS checkrate, --̽ + ISNULL(v6.total_fjot,0) as total_fjot,--װ + ISNULL(v7.total_sjot,0) as total_sjot --Ԥƺ +FROM + (SELECT ISO_ID, COUNT(JOT_ID) AS total_jot,SUM(ISNULL(JOT_Size,0)) AS total_din + FROM dbo.HJGL_PW_JointInfo + GROUP BY ISO_ID) v + LEFT JOIN + (SELECT ISO_ID, COUNT(JOT_ID) AS finished_total_jot,SUM(ISNULL(JOT_Size,0)) AS finished_total_din, + max(weldreport.JOT_WeldDate) AS maxdate, SUM(ISNULL(jot.RT_FilmNum,0)) AS total_film, + SUM(ISNULL(jot.RT_FilmNum,0)-ISNULL(jot.RT1_RepairFilmNum,0)) AS pass_film + FROM dbo.HJGL_PW_JointInfo jot + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not null + GROUP BY ISO_ID) v1 ON v1.ISO_ID=v.ISO_ID + LEFT JOIN + (SELECT ISO_ID, COUNT(jot.JOT_ID) AS point_jot,SUM(ISNULL(jot.RT_FilmNum,0)) AS point_total_film, + SUM(ISNULL(jot.RT_FilmNum,0)-ISNULL(jot.RT1_RepairFilmNum,0)) AS point_pass_film + FROM dbo.HJGL_PW_JointInfo jot + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not NULL AND jot.PointType='' or ((select top 1 CH_TrustItemID from HJGL_CH_TrustItem ti where ti.JOT_ID=jot.JOT_ID) is not null and jot.PointType is null) + GROUP BY ISO_ID) v2 ON v2.ISO_ID=v.ISO_ID + LEFT JOIN + (SELECT ISO_ID, COUNT(jot.JOT_ID) AS ext_jot,SUM(ISNULL(jot.RT_FilmNum,0)) AS ext_total_film, + SUM(ISNULL(jot.RT_FilmNum,0)-ISNULL(jot.RT1_RepairFilmNum,0)) AS ext_pass_film + FROM dbo.HJGL_PW_JointInfo jot + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not NULL AND jot.PointType='͸' + GROUP BY ISO_ID) v3 ON v3.ISO_ID=v.ISO_ID + LEFT JOIN + (SELECT jot.ISO_ID, COUNT(distinct trust.JOT_ID) AS trust_total_jot --trust.CH_TrustItemID + FROM dbo.HJGL_CH_TrustItem trust + LEFT join dbo.HJGL_PW_JointInfo AS jot on jot.JOT_ID=trust.JOT_ID + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not NULL + GROUP BY jot.ISO_ID) v5 ON v5.ISO_ID=v.ISO_ID + LEFT JOIN + (SELECT ISO_ID,COUNT(DISTINCT(jot.JOT_ID)) AS total_repairjot + FROM dbo.HJGL_PW_JointInfo jot + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not NULL + AND(jot.RT1_RepairFilmNum IS NOT NULL OR jot.PTIsRepair1=1 OR jot.MTIsRepair1=1 OR jot.UTIsRepair1=1) + GROUP BY ISO_ID) v4 ON v4.ISO_ID=v.ISO_ID +--װ + LEFT JOIN + (SELECT ISO_ID,COUNT(jot.JOT_ID) AS total_fjot + FROM dbo.HJGL_PW_JointInfo jot + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not NULL + AND jot.WLO_Code='F' + GROUP BY ISO_ID) v6 ON v6.ISO_ID=v.ISO_ID +--Ԥƺ + LEFT JOIN + (SELECT ISO_ID,COUNT(jot.JOT_ID) AS total_sjot + FROM dbo.HJGL_PW_JointInfo jot + LEFT join HJGL_BO_WeldReportMain AS weldreport on weldreport.DReportID=jot.DReportID + WHERE (weldreport.JOT_WeldDate>=@StartDate or @StartDate is null) and (weldreport.JOT_WeldDate<=@EndDate or @EndDate is null) + AND jot.DReportID is not NULL + AND jot.WLO_Code='S' + GROUP BY ISO_ID) v7 ON v7.ISO_ID=v.ISO_ID + + LEFT JOIN dbo.HJGL_PW_IsoInfo iso ON iso.ISO_ID = v.ISO_ID + LEFT JOIN Base_Unit AS Unit ON Unit.UnitId = iso.BSU_ID + LEFT JOIN Base_Project AS Project ON Project.ProjectId = iso.ProjectId + WHERE (iso.ProjectId = @projectId OR @projectId IS NULL) + AND (iso.BSU_ID=@unitno OR @unitno IS NULL) + AND (iso.STE_ID=@steel OR @steel IS NULL) + AND (iso.ISO_IsoNo = @isono OR @isono IS NULL) + + + + + + +GO + + + +ALTER PROCEDURE [dbo].[sp_rpt_WelderQualified] +( + @projectId NVARCHAR(50), + @WED_Name nvarchar(50) = null +) +AS +/***********-ϸ񺸹ǼDZ*************/ +SELECT (ROW_NUMBER() OVER(ORDER BY pw.ProjectWelderId)) AS Number, +pw.ProjectWelderId, +w.WED_Code, +w.WED_Name, +w.WED_WorkCode as CertificateNo, +convert(varchar(10),wqp.LimitDate,111) as LimitDate, + STRING_AGG(wqp.QualifiedProjectCode, '') as QualifiedProjectCode +FROM Project_Welder pw +LEFT JOIN HJGL_BS_Welder w ON w.WED_ID = pw.WED_ID +left join HJGL_BS_WelderQualifiedProject wqp on wqp.WED_ID = pw.WED_ID +where pw.ProjectId=@projectId +and (w.WED_Name like @WED_Name or @WED_Name is null) +and wqp.LimitDate IS NOT NULL AND wqp.LimitDate> = GETDATE() +GROUP BY pw.ProjectWelderId,w.WED_Code,w.WED_Name,w.WED_WorkCode,wqp.LimitDate +order by w.WED_Code,wqp.LimitDate +GO + + diff --git a/HJGL_DS/BLL/Common/Const.cs b/HJGL_DS/BLL/Common/Const.cs index eca89e6..9dc044f 100644 --- a/HJGL_DS/BLL/Common/Const.cs +++ b/HJGL_DS/BLL/Common/Const.cs @@ -2544,6 +2544,11 @@ namespace BLL /// public const string JGZL_QualifiedWelderUrl = "File\\Word\\JGZL\\合格焊工登记表导出模板.docx"; + /// + /// 无损检测人员登记表导出模板 + /// + public const string JGZL_NDTPersonUrl = "File\\Word\\JGZL\\无损检测人员登记表导出模板.docx"; + /// /// 管道系统压力试验条件确认记录导出模板 /// diff --git a/HJGL_DS/FineUIPro.Web/File/Fastreport/JGZL/无损检测人员登记表.frx b/HJGL_DS/FineUIPro.Web/File/Fastreport/JGZL/无损检测人员登记表.frx index 8007f1b..6816dcd 100644 --- a/HJGL_DS/FineUIPro.Web/File/Fastreport/JGZL/无损检测人员登记表.frx +++ b/HJGL_DS/FineUIPro.Web/File/Fastreport/JGZL/无损检测人员登记表.frx @@ -1,5 +1,5 @@  - + using System; using System.Collections; using System.Collections.Generic; @@ -42,7 +42,7 @@ namespace FastReport } - + diff --git a/HJGL_DS/FineUIPro.Web/File/Word/JGZL/合格焊工登记表导出模板.docx b/HJGL_DS/FineUIPro.Web/File/Word/JGZL/合格焊工登记表导出模板.docx index 49ad41a066f790d9615f8e2bd673f09e6a28b549..297ced6232b1c012db079e154b01e788e8518631 100644 GIT binary patch delta 10748 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 V?+on!YZo(UqYf<+w#Gk${|ohCv9tgH delta 10829 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 literal 0 HcmV?d00001 diff --git a/HJGL_DS/FineUIPro.Web/HJGL/WeldingReport/IsoCmprehensive.aspx b/HJGL_DS/FineUIPro.Web/HJGL/WeldingReport/IsoCmprehensive.aspx index 6996051..24eb790 100644 --- a/HJGL_DS/FineUIPro.Web/HJGL/WeldingReport/IsoCmprehensive.aspx +++ b/HJGL_DS/FineUIPro.Web/HJGL/WeldingReport/IsoCmprehensive.aspx @@ -112,13 +112,14 @@ - - <%-- - + + <%-- diff --git a/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx b/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx index 00346fe..867749b 100644 --- a/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx +++ b/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx @@ -43,6 +43,9 @@ + + diff --git a/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.cs b/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.cs index 82de6c7..18523a1 100644 --- a/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.cs +++ b/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.cs @@ -1,14 +1,16 @@ -using BLL; +using Aspose.Words; +using Aspose.Words.Tables; +using BLL; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; -using System.Data.SqlClient; using System.Data; +using System.Data.SqlClient; +using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; -using System.IO; -using Newtonsoft.Json.Linq; namespace FineUIPro.Web.JGZL { @@ -548,6 +550,173 @@ namespace FineUIPro.Web.JGZL return; } } - #endregion + #endregion + + #region 导出按钮 + /// 导出按钮 + /// + /// + /// + protected void btnOut_Click(object sender, EventArgs e) + { + string rootPath = Server.MapPath("~/"); + string initTemplatePath = string.Empty; + string uploadfilepath = string.Empty; + string newUrl = string.Empty; + string filePath = string.Empty; + + int maxrowCount = 22; + + string projectId = this.tvControlItem.SelectedNodeID; + if (!string.IsNullOrEmpty(projectId)) + { + string strSql = @"SELECT * from JGZL_NDTPerson where ProjectId = @ProjectId"; + List listStr = new List(); + listStr.Add(new SqlParameter("@ProjectId", projectId)); + if (!string.IsNullOrEmpty(this.txtPersonNameS.Text)) + { + strSql += " and PersonName like @personName"; + listStr.Add(new SqlParameter("@personName", "%" + this.txtPersonNameS.Text + "%")); + } + strSql += " order by ValidityDate desc"; + SqlParameter[] parameter = listStr.ToArray(); + DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); + + initTemplatePath = Const.JGZL_NDTPersonUrl; + uploadfilepath = rootPath + initTemplatePath; + + newUrl = uploadfilepath.Replace("无损检测人员登记表导出模板", "无损检测人员登记表"); + if (File.Exists(newUrl)) + { + File.Delete(newUrl); + } + File.Copy(uploadfilepath, newUrl); + //更新书签内容 + Document doc = new Aspose.Words.Document(newUrl); + DocumentBuilder builder = new DocumentBuilder(doc); + + Aspose.Words.Tables.Table table = (Aspose.Words.Tables.Table)doc.GetChild(NodeType.Table, 0, true); + + Bookmark projectName = doc.Range.Bookmarks["ProjectName"]; + if (projectName != null) + { + projectName.Text = BLL.Base_ProjectService.GetProjectByProjectId(projectId).ProjectName; + } + + // 设置表头行重复显示 + table.Rows[0].RowFormat.HeadingFormat = true; + table.Rows[1].RowFormat.HeadingFormat = true; + + // 先记录页尾行,并从表格中移除 + Row footerRow = table.Rows[table.Rows.Count - 2]; + table.Rows.RemoveAt(table.Rows.Count - 2); + Row footerRow2 = table.Rows[table.Rows.Count - 1]; + table.Rows.RemoveAt(table.Rows.Count - 1); + + // 清空模板里的旧数据行,只保留2行表头(防止错位) + while (table.Rows.Count > 2) + { + table.Rows.RemoveAt(2); + } + Row headerRow = table.Rows[1]; // 字段名表头行 + double[] colWidths = new double[6]; + for (int i = 0; i < 6; i++) + { + colWidths[i] = headerRow.Cells[i].CellFormat.Width; + } + // 填充数据行 + for (int i = 0; i < tb.Rows.Count; i++) + { + Row row = new Row(doc); + row.Cells.Add(CreateCell((i + 1).ToString(), doc, colWidths[0], "楷体", "10.5")); + row.Cells.Add(CreateCell(tb.Rows[i]["PersonName"].ToString(), doc, colWidths[1], "楷体", "10.5")); + row.Cells.Add(CreateCell(tb.Rows[i]["CertificateNumber"].ToString(), doc, colWidths[2], "楷体", "10.5")); + row.Cells.Add(CreateCell(tb.Rows[i]["QualifiedProjectCode"].ToString(), doc, colWidths[3], "楷体", "10.5")); + row.Cells.Add(CreateCell(tb.Rows[i]["Levels"].ToString(), doc, colWidths[4], "楷体", "10.5")); + row.Cells.Add(CreateCell(tb.Rows[i]["ValidityDate"].ToString(), doc, colWidths[5], "楷体", "10.5")); + table.Rows.Add(row); + } + // 不满一页,自动填充空白行 + int realDataCount = tb.Rows.Count; + int needBlankRows = maxrowCount - realDataCount; + if (needBlankRows > 0) + { + for (int i = 0; i < needBlankRows; i++) + { + Row blankRow = new Row(doc); + blankRow.Cells.Add(CreateCell("", doc, colWidths[0], "楷体", "10.5")); + blankRow.Cells.Add(CreateCell("", doc, colWidths[1], "楷体", "10.5")); + blankRow.Cells.Add(CreateCell("", doc, colWidths[2], "楷体", "10.5")); + blankRow.Cells.Add(CreateCell("", doc, colWidths[3], "楷体", "10.5")); + blankRow.Cells.Add(CreateCell("", doc, colWidths[4], "楷体", "10.5")); + blankRow.Cells.Add(CreateCell("", doc, colWidths[5], "楷体", "10.5")); + table.Rows.Add(blankRow); + } + } + + //把页尾行重新加回表格最后 + table.Rows.Add(footerRow); + table.Rows.Add(footerRow2); + + // 设置表格格式 + table.AutoFit(AutoFitBehavior.FixedColumnWidths); + table.Alignment = TableAlignment.Center; + table.SetBorders(Aspose.Words.LineStyle.Single, 1, System.Drawing.Color.Black); + + // 强制刷新所有单元格宽度,防止个别单元格宽度不生效 + foreach (Row r in table.Rows) + { + foreach (Cell c in r.Cells) + { + c.CellFormat.Width = colWidths[c.ParentRow.Cells.IndexOf(c)]; + } + } + doc.Save(newUrl); + + string fileName = Path.GetFileName(newUrl); + FileInfo info = new FileInfo(newUrl); + long fileSize = info.Length; + Response.Clear(); + Response.ContentType = "application/x-zip-compressed"; + Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); + Response.AddHeader("Content-Length", fileSize.ToString()); + Response.TransmitFile(newUrl, 0, fileSize); + Response.Flush(); + Response.Close(); + File.Delete(newUrl); + } + else + { + Alert.ShowInTop("请选择项目!", MessageBoxIcon.Warning); + return; + } + } + /// + /// 创建带字体、宽度的表格单元格 + /// + private Cell CreateCell(string text, Document doc, double width, string fontName, string fontSize) + { + Cell cell = new Cell(doc); + cell.CellFormat.Width = width; + cell.CellFormat.LeftPadding = 2; + cell.CellFormat.RightPadding = 2; + cell.CellFormat.TopPadding = 2; + cell.CellFormat.BottomPadding = 2; + + Paragraph para = new Paragraph(doc); + para.ParagraphFormat.Alignment = ParagraphAlignment.Center; // 居中 + para.ParagraphFormat.SpaceAfter = 0; + para.ParagraphFormat.SpaceBefore = 0; + + Run run = new Run(doc, text); + run.Font.Name = fontName; // 字体 + run.Font.Size = Convert.ToDouble(fontSize); // 字号 + + para.AppendChild(run); + cell.AppendChild(para); + + return cell; + } + #endregion } } \ No newline at end of file diff --git a/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.designer.cs b/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.designer.cs index ff6f01b..e85ca76 100644 --- a/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.designer.cs +++ b/HJGL_DS/FineUIPro.Web/JGZL/NDTPerson.aspx.designer.cs @@ -140,6 +140,15 @@ namespace FineUIPro.Web.JGZL /// protected global::FineUIPro.Button btnPrint; + /// + /// btnOut 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnOut; + /// /// Grid1 控件。 /// diff --git a/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx b/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx index d3353f2..9407050 100644 --- a/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx +++ b/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx @@ -37,6 +37,7 @@ + diff --git a/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.cs b/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.cs index b018ee7..47a0934 100644 --- a/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.cs +++ b/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.cs @@ -105,6 +105,10 @@ namespace FineUIPro.Web.JGZL { List listStr = new List(); listStr.Add(new SqlParameter("@projectId", this.tvControlItem.SelectedNodeID)); + if (!string.IsNullOrEmpty(this.txtName.Text.Trim())) + { + listStr.Add(new SqlParameter("@WED_Name", "%" + this.txtName.Text.Trim() + "%")); + } SqlParameter[] parameter = listStr.ToArray(); DataTable tb = BLL.SQLHelper.GetDataTableRunProc("sp_rpt_WelderQualified", parameter); @@ -172,6 +176,10 @@ namespace FineUIPro.Web.JGZL List listStr = new List(); listStr.Add(new SqlParameter("@projectId", projectId)); + if (!string.IsNullOrEmpty(this.txtName.Text.Trim())) + { + listStr.Add(new SqlParameter("@WED_Name", "%" + this.txtName.Text.Trim() + "%")); + } SqlParameter[] parameter = listStr.ToArray(); DataTable tb = BLL.SQLHelper.GetDataTableRunProc("sp_rpt_WelderQualified", parameter); @@ -230,14 +238,15 @@ namespace FineUIPro.Web.JGZL string newUrl = string.Empty; string filePath = string.Empty; - //每页显示的固定数据行数 - int rowsPerPage = 36; - string projectId = this.tvControlItem.SelectedNodeID; if (!string.IsNullOrEmpty(projectId)) { List listStr = new List(); listStr.Add(new SqlParameter("@projectId", projectId)); + if (!string.IsNullOrEmpty(this.txtName.Text.Trim())) + { + listStr.Add(new SqlParameter("@WED_Name", "%" + this.txtName.Text.Trim() + "%")); + } SqlParameter[] parameter = listStr.ToArray(); DataTable tb = BLL.SQLHelper.GetDataTableRunProc("sp_rpt_WelderQualified", parameter); @@ -266,49 +275,48 @@ namespace FineUIPro.Web.JGZL table.Rows[0].RowFormat.HeadingFormat = true; table.Rows[1].RowFormat.HeadingFormat = true; - //// 先记录页尾行,并从表格中移除 - //Row footerRow = table.Rows[table.Rows.Count - 1]; - //table.Rows.RemoveAt(table.Rows.Count - 1); + // 先记录页尾行,并从表格中移除 + Row footerRow = table.Rows[table.Rows.Count-2]; + table.Rows.RemoveAt(table.Rows.Count-2); + Row footerRow2 = table.Rows[table.Rows.Count - 1]; + table.Rows.RemoveAt(table.Rows.Count - 1); + + // 清空模板里的旧数据行,只保留2行表头(防止错位) + while (table.Rows.Count > 2) + { + table.Rows.RemoveAt(2); + } + + // 单位:磅 1.69cm ≈ 48磅 + double col1 = 0.93 * 28.35; // 序号 + double col2 = 1.7 * 28.35; // 焊工姓名 + double col3 = 2.19 * 28.35; // 焊工代号 + double col4 = 3.95 * 28.35; // 证书编号 + double col5 = 6.04 * 28.35; // 合格项目代号 + double col6 = 2.27 * 28.35; // 有效日期 for (int i = 0; i < tb.Rows.Count; i++) { //创建行 Row row = new Row(doc); - row.Cells.Add(CreateCell((i + 1).ToString(), doc, 26.37, "", "")); - row.Cells.Add(CreateCell(tb.Rows[i]["WED_Name"].ToString(), doc, 48.2, "", "")); - row.Cells.Add(CreateCell(tb.Rows[i]["WED_Code"].ToString(), doc,62, "", "")); - row.Cells.Add(CreateCell(tb.Rows[i]["CertificateNo"].ToString(), doc, 111.98, "", "")); - row.Cells.Add(CreateCell(tb.Rows[i]["QualifiedProjectCode"].ToString(), doc, 171.23, "", "")); - row.Cells.Add(CreateCell(tb.Rows[i]["LimitDate"].ToString(), doc, 64.3545, "", "")); - table.Rows.Insert(i + 2, row); - } - //// 计算并插入空白行,填满整页 - //// 计算总数据行数 - //int totalDataRows = tb.Rows.Count; - //// 计算需要补充的空白行数量 - //int remainder = totalDataRows % rowsPerPage; - //int needBlankRows = remainder == 0 ? 0 : rowsPerPage - remainder; + row.Cells.Add(CreateCell((i + 1).ToString(), doc, col1, "", "")); + row.Cells.Add(CreateCell(tb.Rows[i]["WED_Name"].ToString(), doc, col2, "", "")); + row.Cells.Add(CreateCell(tb.Rows[i]["WED_Code"].ToString(), doc, col3, "", "")); + row.Cells.Add(CreateCell(tb.Rows[i]["CertificateNo"].ToString(), doc, col4, "", "")); + row.Cells.Add(CreateCell(tb.Rows[i]["QualifiedProjectCode"].ToString(), doc, col5, "", "")); + row.Cells.Add(CreateCell(tb.Rows[i]["LimitDate"].ToString(), doc, col6, "", "")); + table.Rows.Add(row); + } - // 插入空白行(和数据行格式保持一致,仅内容为空) - //for (int i = 0; i < needBlankRows - 1; i++) - //{ - // Row blankRow = new Row(doc); - // // 空白行的单元格宽度和数据行保持一致 - // blankRow.Cells.Add(CreateCell("", doc, 27, "", "")); - // blankRow.Cells.Add(CreateCell("", doc, 118, "", "")); - // blankRow.Cells.Add(CreateCell("", doc, 261.3, "", "")); - // blankRow.Cells.Add(CreateCell("", doc, 74, "", "")); - // blankRow.Cells.Add(CreateCell("", doc, 74, "", "")); - // blankRow.Cells.Add(CreateCell("", doc, 74, "", "")); - // // 插入到表格最后一行 - // table.Rows.Add(blankRow); - //} //把页尾行重新加回表格最后 - //table.Rows.Add(footerRow); + table.Rows.Add(footerRow); + table.Rows.Add(footerRow2); //自动设置表格样式 table.AutoFit(AutoFitBehavior.FixedColumnWidths); table.Alignment = TableAlignment.Center; + table.SetBorders(Aspose.Words.LineStyle.Single, 1, System.Drawing.Color.Black); + doc.Save(newUrl); @@ -329,55 +337,20 @@ namespace FineUIPro.Web.JGZL Alert.ShowInTop("请选择项目!", MessageBoxIcon.Warning); return; } - } - - public static Cell CreateCell(String value, Document doc, double cellWidth, string cellMerge = "", string CenterPage = "", string cellUnitLeft = "") + } + private Cell CreateCell(string text, Document doc, double width, string bgColor, string align) { Cell cell = new Cell(doc); - Paragraph p = new Paragraph(doc); - if (!string.IsNullOrEmpty(cellMerge)) - { - if (cellMerge == "0") - { - cell.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;//竖直方向合并的第一个单元格 - } - else - { - cell.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;//竖直方向合并的第一个单元格 - } - - } - else - { - cell.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None; - } - if (!string.IsNullOrEmpty(CenterPage)) - { - //序号 - value = " " + value; - } - if (!string.IsNullOrEmpty(cellUnitLeft)) - { - p.ParagraphFormat.Alignment = ParagraphAlignment.Left;//表格中字体居左 - } - else - { - p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//表格中字体居中 - } - - - p.AppendChild(new Run(doc, value)); - - cell.CellFormat.Width = cellWidth; - - cell.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center; - - cell.CellFormat.Borders.LineWidth = 0.75; - - cell.AppendChild(p); + cell.AppendChild(new Paragraph(doc)); + cell.FirstParagraph.AppendChild(new Run(doc, text)); + cell.CellFormat.Width = width; return cell; } - #endregion + + protected void txtName_TextChanged(object sender, EventArgs e) + { + BindGrid(); + } } } \ No newline at end of file diff --git a/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.designer.cs b/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.designer.cs index 3a4a601..0af31b6 100644 --- a/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.designer.cs +++ b/HJGL_DS/FineUIPro.Web/JGZL/QualifiedWelder.aspx.designer.cs @@ -95,6 +95,15 @@ namespace FineUIPro.Web.JGZL /// protected global::FineUIPro.Toolbar Toolbar2; + /// + /// txtName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextBox txtName; + /// /// ToolbarFill1 控件。 ///