| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  | using BLL; | 
					
						
							|  |  |  |  | using System; | 
					
						
							|  |  |  |  | using System.Text; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using System.Linq; | 
					
						
							|  |  |  |  | using Newtonsoft.Json.Linq; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace FineUIPro.Web.ZHGL.CQMSData | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     public partial class CQMSNoticeDetailsData : PageBase | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |          //使用DateTime.Now获取当前日期,然后获取该月第一天 | 
					
						
							|  |  |  |  |         DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         public Model.SGGLDB db = Funs.DB; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         protected void Page_Load(object sender, EventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (!IsPostBack) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 this.ddlPageSize.SelectedValue = this.Grid1.PageSize.ToString(); | 
					
						
							|  |  |  |  |                 // 绑定表格 | 
					
						
							|  |  |  |  |                 this.BindGrid(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 绑定数据 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 绑定数据 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         private void BindGrid() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             var list = BaseDataService.GetBeUnderConstruction(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim())) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 list = list.Where(p => p.ProjectName.Contains(this.txtProjectName.Text.Trim())).ToList(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             var result = new List<dynamic>(); | 
					
						
							|  |  |  |  |             foreach (var project in list) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 int value1 = 0;  | 
					
						
							|  |  |  |  |                 int value2 = 0;  | 
					
						
							|  |  |  |  |                 int value3 = 0; | 
					
						
							|  |  |  |  |                 int value4 = 0; | 
					
						
							|  |  |  |  |                 string value5 = "0%"; | 
					
						
							|  |  |  |  |                 string value6 = "0%"; | 
					
						
							|  |  |  |  |                 int value7 = 0; | 
					
						
							|  |  |  |  |                 int value8 = 0; | 
					
						
							|  |  |  |  |                 int value9 = 0; | 
					
						
							|  |  |  |  |                 int value10 = 0; | 
					
						
							|  |  |  |  |                 string value11 = "0%"; | 
					
						
							|  |  |  |  |                 string value12 = "0%"; | 
					
						
							|  |  |  |  |                 int value13 = 0; | 
					
						
							|  |  |  |  |                 int value14 = 0; | 
					
						
							|  |  |  |  |                 int value15 = 0; | 
					
						
							|  |  |  |  |                 int value16 = 0; | 
					
						
							|  |  |  |  |                 string value17 = "0%"; | 
					
						
							|  |  |  |  |                 string value18 = "0%"; | 
					
						
							|  |  |  |  |                 int value19 = 0; | 
					
						
							|  |  |  |  |                 int value20 = 0; | 
					
						
							|  |  |  |  |                 int value21 = 0; | 
					
						
							|  |  |  |  |                 int value22 = 0; | 
					
						
							|  |  |  |  |                 string value23 = "0%"; | 
					
						
							|  |  |  |  |                 string value24 = "0%"; | 
					
						
							|  |  |  |  |                 int value25 = 0; | 
					
						
							|  |  |  |  |                 int value26 = 0; | 
					
						
							|  |  |  |  |                 int value27 = 0; | 
					
						
							|  |  |  |  |                 int value28 = 0; | 
					
						
							|  |  |  |  |                 string value29 = "0%"; | 
					
						
							|  |  |  |  |                 string value30 = "0%"; | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #region 质量共检点明细 | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 //专业下所有集合 | 
					
						
							|  |  |  |  |                 List<Model.View_MonthReport_InspectionManagement> totalManagementList = BLL.InspectionManagementService.getViewMonthReportInspectionManagementByCNProfessionalIdAndDate(project.ProjectId, null, Convert.ToDateTime("2015-01-01"), DateTime.Now, false); | 
					
						
							|  |  |  |  |                 //专业下当期集合 | 
					
						
							|  |  |  |  |                 List<Model.View_MonthReport_InspectionManagement> managementList = BLL.InspectionManagementService.getViewMonthReportInspectionManagementByCNProfessionalIdAndDate(project.ProjectId, null, firstDayOfMonth, DateTime.Now, false); | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #region 土建 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string cNProfessionalId1 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "CV" select x.CNProfessionalId).FirstOrDefault(); | 
					
						
							|  |  |  |  |                 //专业下所有集合 | 
					
						
							|  |  |  |  |                 var totalManagementList1 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId1); | 
					
						
							|  |  |  |  |                 //专业下当期集合 | 
					
						
							|  |  |  |  |                 var managementList1 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 value1 = managementList1.Count(); | 
					
						
							|  |  |  |  |                 value2 = totalManagementList1.Count(); | 
					
						
							|  |  |  |  |                  | 
					
						
							| 
									
										
										
										
											2025-10-24 18:27:46 +08:00
										 |  |  |  |                 value3 = managementList1.Count(x => x.IsOnceQualified == true); | 
					
						
							|  |  |  |  |                 value4 = totalManagementList1.Count(x => x.IsOnceQualified == true); | 
					
						
							| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  |                  | 
					
						
							|  |  |  |  |                 if (value1 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value5 = Math.Round((double)value3 / (double)value1 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (value2 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value6 = Math.Round((double)value4 / (double)value2 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region 设备 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string cNProfessionalId2 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "EQ" select x.CNProfessionalId).FirstOrDefault(); | 
					
						
							|  |  |  |  |                 //专业下所有集合 | 
					
						
							|  |  |  |  |                 var totalManagementList2 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId2); | 
					
						
							|  |  |  |  |                 //专业下当期集合 | 
					
						
							|  |  |  |  |                 var managementList2 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId2); | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 value7 = managementList2.Count(); | 
					
						
							|  |  |  |  |                 value8 = totalManagementList2.Count(); | 
					
						
							|  |  |  |  |                  | 
					
						
							| 
									
										
										
										
											2025-10-24 18:27:46 +08:00
										 |  |  |  |                 value9 = managementList2.Count(x => x.IsOnceQualified == true); | 
					
						
							|  |  |  |  |                 value10 = totalManagementList2.Count(x => x.IsOnceQualified == true); | 
					
						
							| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  |                  | 
					
						
							|  |  |  |  |                 if (value7 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value11 = Math.Round((double)value9 / (double)value7 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (value8 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value12 = Math.Round((double)value10 / (double)value8 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region 电气 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string cNProfessionalId3 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "EL" select x.CNProfessionalId).FirstOrDefault(); | 
					
						
							|  |  |  |  |                 //专业下所有集合 | 
					
						
							|  |  |  |  |                 var totalManagementList3 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId3); | 
					
						
							|  |  |  |  |                 //专业下当期集合 | 
					
						
							|  |  |  |  |                 var managementList3 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId3); | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 value13 = managementList3.Count(); | 
					
						
							|  |  |  |  |                 value14 = totalManagementList3.Count(); | 
					
						
							|  |  |  |  |                  | 
					
						
							| 
									
										
										
										
											2025-10-24 18:27:46 +08:00
										 |  |  |  |                 value15 = managementList3.Count(x => x.IsOnceQualified == true); | 
					
						
							|  |  |  |  |                 value16 = totalManagementList3.Count(x => x.IsOnceQualified == true); | 
					
						
							| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  |                  | 
					
						
							|  |  |  |  |                 if (value13 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value17 = Math.Round((double)value15 / (double)value13 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (value14 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value18 = Math.Round((double)value16 / (double)value14 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region 仪表 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string cNProfessionalId4 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "IN" select x.CNProfessionalId).FirstOrDefault(); | 
					
						
							|  |  |  |  |                 //专业下所有集合 | 
					
						
							|  |  |  |  |                 var totalManagementList4 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId4); | 
					
						
							|  |  |  |  |                 //专业下当期集合 | 
					
						
							|  |  |  |  |                 var managementList4 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId4); | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 value19 = managementList4.Count(); | 
					
						
							|  |  |  |  |                 value20 = totalManagementList4.Count(); | 
					
						
							|  |  |  |  |                  | 
					
						
							| 
									
										
										
										
											2025-10-24 18:27:46 +08:00
										 |  |  |  |                 value21 = managementList4.Count(x => x.IsOnceQualified == true); | 
					
						
							|  |  |  |  |                 value22 = totalManagementList4.Count(x => x.IsOnceQualified == true); | 
					
						
							| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  |                  | 
					
						
							|  |  |  |  |                 if (value19 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value23 = Math.Round((double)value21 / (double)value19 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (value20 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value24 = Math.Round((double)value22 / (double)value20 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region 防腐 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string cNProfessionalId5 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "AC" select x.CNProfessionalId).FirstOrDefault(); | 
					
						
							|  |  |  |  |                 //专业下所有集合 | 
					
						
							|  |  |  |  |                 var totalManagementList5 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId5); | 
					
						
							|  |  |  |  |                 //专业下当期集合 | 
					
						
							|  |  |  |  |                 var managementList5 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId5); | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 value25 = managementList5.Count(); | 
					
						
							|  |  |  |  |                 value26 = totalManagementList5.Count(); | 
					
						
							|  |  |  |  |                  | 
					
						
							| 
									
										
										
										
											2025-10-24 18:27:46 +08:00
										 |  |  |  |                 value27 = managementList5.Count(x => x.IsOnceQualified == true); | 
					
						
							|  |  |  |  |                 value28 = totalManagementList5.Count(x => x.IsOnceQualified == true); | 
					
						
							| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  |                  | 
					
						
							|  |  |  |  |                 if (value25 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value29 = Math.Round((double)value27 / (double)value25 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (value26 != 0)//被除数不能为零 | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     value30 = Math.Round((double)value28 / (double)value26 * 100, 2) + "%";//保留两位小数、后四舍五入 | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 // 构造动态对象用于绑定到Grid | 
					
						
							|  |  |  |  |                 result.Add(new | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     project.ProjectId, | 
					
						
							|  |  |  |  |                     project.ProjectName, | 
					
						
							|  |  |  |  |                     project.ShortName, | 
					
						
							|  |  |  |  |                     Value1 = value1, | 
					
						
							|  |  |  |  |                     Value2 = value2, | 
					
						
							|  |  |  |  |                     Value3 = value3,  | 
					
						
							|  |  |  |  |                     Value4 = value4,  | 
					
						
							|  |  |  |  |                     Value5 = value5,  | 
					
						
							|  |  |  |  |                     Value6 = value6,  | 
					
						
							|  |  |  |  |                     Value7 = value7,  | 
					
						
							|  |  |  |  |                     Value8 = value8,  | 
					
						
							|  |  |  |  |                     Value9 = value9,  | 
					
						
							|  |  |  |  |                     Value10 = value10,  | 
					
						
							|  |  |  |  |                     Value11 = value11,  | 
					
						
							|  |  |  |  |                     Value12 = value12, | 
					
						
							|  |  |  |  |                     Value13 = value13, | 
					
						
							|  |  |  |  |                     Value14 = value14, | 
					
						
							|  |  |  |  |                     Value15 = value15, | 
					
						
							|  |  |  |  |                     Value16 = value16, | 
					
						
							|  |  |  |  |                     Value17 = value17, | 
					
						
							|  |  |  |  |                     Value18 = value18, | 
					
						
							|  |  |  |  |                     Value19 = value19, | 
					
						
							|  |  |  |  |                     Value20 = value20, | 
					
						
							|  |  |  |  |                     Value21 = value21, | 
					
						
							|  |  |  |  |                     Value22 = value22, | 
					
						
							|  |  |  |  |                     Value23 = value23, | 
					
						
							|  |  |  |  |                     Value24 = value24, | 
					
						
							|  |  |  |  |                     Value25 = value25, | 
					
						
							|  |  |  |  |                     Value26 = value26, | 
					
						
							|  |  |  |  |                     Value27 = value27, | 
					
						
							|  |  |  |  |                     Value28 = value28, | 
					
						
							|  |  |  |  |                     Value29 = value29, | 
					
						
							|  |  |  |  |                     Value30 = value30 | 
					
						
							|  |  |  |  |                 }); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             var pagedResult = result.Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize).ToList(); | 
					
						
							|  |  |  |  |             Grid1.RecordCount = result.Count; | 
					
						
							|  |  |  |  |             Grid1.DataSource = pagedResult; | 
					
						
							|  |  |  |  |             Grid1.DataBind(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             var Value1Sum = pagedResult.Sum(p => p.Value1); | 
					
						
							|  |  |  |  |             var Value2Sum = pagedResult.Sum(p => p.Value2); | 
					
						
							|  |  |  |  |             var Value3Sum = pagedResult.Sum(p => p.Value3); | 
					
						
							|  |  |  |  |             var Value4Sum = pagedResult.Sum(p => p.Value4); | 
					
						
							|  |  |  |  |             var Value7Sum = pagedResult.Sum(p => p.Value7); | 
					
						
							|  |  |  |  |             var Value8Sum = pagedResult.Sum(p => p.Value8); | 
					
						
							|  |  |  |  |             var Value9Sum = pagedResult.Sum(p => p.Value9); | 
					
						
							|  |  |  |  |             var Value10Sum = pagedResult.Sum(p => p.Value10); | 
					
						
							|  |  |  |  |             var Value13Sum = pagedResult.Sum(p => p.Value13); | 
					
						
							|  |  |  |  |             var Value14Sum = pagedResult.Sum(p => p.Value14); | 
					
						
							|  |  |  |  |             var Value15Sum = pagedResult.Sum(p => p.Value15); | 
					
						
							|  |  |  |  |             var Value16Sum = pagedResult.Sum(p => p.Value16); | 
					
						
							|  |  |  |  |             var Value19Sum = pagedResult.Sum(p => p.Value19); | 
					
						
							|  |  |  |  |             var Value20Sum = pagedResult.Sum(p => p.Value20); | 
					
						
							|  |  |  |  |             var Value21Sum = pagedResult.Sum(p => p.Value21); | 
					
						
							|  |  |  |  |             var Value22Sum = pagedResult.Sum(p => p.Value22); | 
					
						
							|  |  |  |  |             var Value25Sum = pagedResult.Sum(p => p.Value25); | 
					
						
							|  |  |  |  |             var Value26Sum = pagedResult.Sum(p => p.Value26); | 
					
						
							|  |  |  |  |             var Value27Sum = pagedResult.Sum(p => p.Value27); | 
					
						
							|  |  |  |  |             var Value28Sum = pagedResult.Sum(p => p.Value28); | 
					
						
							|  |  |  |  |              | 
					
						
							|  |  |  |  |              | 
					
						
							|  |  |  |  |             JObject summary = new JObject(); | 
					
						
							|  |  |  |  |             summary.Add("ProjectName", "合计"); | 
					
						
							|  |  |  |  |             summary.Add("Value1", Value1Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value2", Value2Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value3", Value3Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value4", Value4Sum); | 
					
						
							|  |  |  |  |             if (Value1Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value5", Math.Round((double)Value3Sum / (double)Value1Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value5", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (Value2Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value6", Math.Round((double)Value4Sum / (double)Value2Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value6", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             summary.Add("Value7", Value7Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value8", Value8Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value9", Value9Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value10", Value10Sum); | 
					
						
							|  |  |  |  |             if (Value7Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value11", Math.Round((double)Value9Sum / (double)Value7Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value11", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (Value8Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value12", Math.Round((double)Value10Sum / (double)Value8Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value12", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             summary.Add("Value13", Value13Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value14", Value14Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value15", Value15Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value16", Value16Sum); | 
					
						
							|  |  |  |  |             if (Value13Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value17", Math.Round((double)Value15Sum / (double)Value13Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value17", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (Value14Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value18", Math.Round((double)Value16Sum / (double)Value14Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value18", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             summary.Add("Value19", Value19Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value20", Value20Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value21", Value21Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value22", Value22Sum); | 
					
						
							|  |  |  |  |             if (Value19Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value23", Math.Round((double)Value21Sum / (double)Value19Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value23", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (Value20Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value24", Math.Round((double)Value22Sum / (double)Value20Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value24", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             summary.Add("Value25", Value25Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value26", Value26Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value27", Value27Sum); | 
					
						
							|  |  |  |  |             summary.Add("Value28", Value28Sum); | 
					
						
							|  |  |  |  |             if (Value25Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value29", Math.Round((double)Value27Sum / (double)Value25Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value29", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (Value26Sum != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value30", Math.Round((double)Value28Sum / (double)Value26Sum * 100, 2) + "%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 summary.Add("Value30", "0%"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |              | 
					
						
							|  |  |  |  |             Grid1.SummaryData = summary; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region GV 数据操作 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 分页 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender"></param> | 
					
						
							|  |  |  |  |         /// <param name="e"></param> | 
					
						
							|  |  |  |  |         protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             this.BindGrid(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 排序 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender"></param> | 
					
						
							|  |  |  |  |         /// <param name="e"></param> | 
					
						
							|  |  |  |  |         protected void Grid1_Sort(object sender, GridSortEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             this.BindGrid(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 分页显示条数下拉框 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender"></param> | 
					
						
							|  |  |  |  |         /// <param name="e"></param> | 
					
						
							|  |  |  |  |         protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); | 
					
						
							|  |  |  |  |             this.BindGrid(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 关闭弹出窗 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 关闭弹出窗 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender"></param> | 
					
						
							|  |  |  |  |         /// <param name="e"></param> | 
					
						
							|  |  |  |  |         protected void Window1_Close(object sender, WindowCloseEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             BindGrid(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 导出按钮 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// 导出按钮 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender"></param> | 
					
						
							|  |  |  |  |         /// <param name="e"></param> | 
					
						
							|  |  |  |  |         protected void btnOut_Click(object sender, EventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             Response.ClearContent(); | 
					
						
							|  |  |  |  |             string filename = Funs.GetNewFileName(); | 
					
						
							|  |  |  |  |             Response.AddHeader("content-disposition", | 
					
						
							|  |  |  |  |                 "attachment; filename=" + | 
					
						
							|  |  |  |  |                 System.Web.HttpUtility.UrlEncode("共检点明细表" + filename, System.Text.Encoding.UTF8) + ".xls"); | 
					
						
							|  |  |  |  |             Response.ContentType = "application/excel"; | 
					
						
							|  |  |  |  |             Response.ContentEncoding = System.Text.Encoding.UTF8; | 
					
						
							|  |  |  |  |             this.BindGrid(); | 
					
						
							|  |  |  |  |             Response.Write(GetGridTableHtml(Grid1)); | 
					
						
							|  |  |  |  |             Response.End(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 /// <summary> | 
					
						
							|  |  |  |  |         /// 导出方法 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="grid"></param> | 
					
						
							|  |  |  |  |         /// <returns></returns> | 
					
						
							|  |  |  |  |         private string GetGridTableHtml(Grid grid) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             StringBuilder sb = new StringBuilder(); | 
					
						
							|  |  |  |  |             sb.Append("<meta http-equiv=\"content-type\" content=\"application/excel; charset=UTF-8\"/>"); | 
					
						
							|  |  |  |  |             sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 收集所有列信息,包括嵌套的列 | 
					
						
							|  |  |  |  |             List<GridColumn> flattenedColumns = new List<GridColumn>(); | 
					
						
							|  |  |  |  |             List<int> columnLevels = new List<int>(); | 
					
						
							|  |  |  |  |             int maxLevel = GetFlattenedColumns(grid.Columns, flattenedColumns, columnLevels, 0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 生成表头 | 
					
						
							|  |  |  |  |             for (int level = 0; level <= maxLevel; level++) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 sb.Append("<tr>"); | 
					
						
							|  |  |  |  |                 int i = 0; | 
					
						
							|  |  |  |  |                 while (i < flattenedColumns.Count) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     GridColumn column = flattenedColumns[i]; | 
					
						
							|  |  |  |  |                     int columnLevel = columnLevels[i]; | 
					
						
							|  |  |  |  |                      | 
					
						
							|  |  |  |  |                     if (columnLevel == level) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 计算跨行和跨列数 | 
					
						
							|  |  |  |  |                         int rowspan = 1; | 
					
						
							|  |  |  |  |                         int colspan = 1; | 
					
						
							|  |  |  |  |                          | 
					
						
							|  |  |  |  |                         if (column is GroupField groupField && groupField.Columns != null && groupField.Columns.Count > 0) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             // 这是一个分组列,计算它的子列数量 | 
					
						
							|  |  |  |  |                             colspan = CountLeafColumns(groupField); | 
					
						
							|  |  |  |  |                             rowspan = 1; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             // 这是一个叶子列,需要跨行 | 
					
						
							|  |  |  |  |                             rowspan = maxLevel - level + 1; | 
					
						
							|  |  |  |  |                             colspan = 1; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                          | 
					
						
							|  |  |  |  |                         string cellValue = column.HeaderText ?? ""; | 
					
						
							|  |  |  |  |                         if (rowspan > 1) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             sb.AppendFormat("<td rowspan=\"{0}\" align=\"center\">{1}</td>", rowspan, cellValue); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             sb.AppendFormat("<td colspan=\"{0}\" align=\"center\">{1}</td>", colspan, cellValue); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                          | 
					
						
							|  |  |  |  |                         // 跳过已处理的子列 | 
					
						
							|  |  |  |  |                         if (colspan > 1) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             i += colspan; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             i++; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else if (columnLevel < level && !(column is GroupField)) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 已经由rowspan处理的单元格,跳过 | 
					
						
							|  |  |  |  |                         i++; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         i++; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 sb.Append("</tr>"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 添加数据行 | 
					
						
							|  |  |  |  |             foreach (GridRow row in grid.Rows) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 sb.Append("<tr>"); | 
					
						
							|  |  |  |  |                 List<GridColumn> leafColumns = GetLeafColumns(grid.Columns); | 
					
						
							|  |  |  |  |                 foreach (GridColumn column in leafColumns) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     string html = row.Values[column.ColumnIndex].ToString(); | 
					
						
							|  |  |  |  |                     if (column.ColumnID == "tfNumber") | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         html = (row.FindControl("lblNumber") as System.Web.UI.WebControls.Label).Text; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     sb.AppendFormat("<td>{0}</td>", html); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 sb.Append("</tr>"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 添加合计行 | 
					
						
							|  |  |  |  |             if (grid.SummaryData != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 sb.Append("<tr style=\"font-weight:bold; color:red;\">"); | 
					
						
							|  |  |  |  |                 List<GridColumn> leafColumns = GetLeafColumns(grid.Columns); | 
					
						
							|  |  |  |  |                 foreach (GridColumn column in leafColumns) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     // 使用反射获取DataField属性值,避免编译错误 | 
					
						
							|  |  |  |  |                     var dataFieldProperty = column.GetType().GetProperty("DataField"); | 
					
						
							|  |  |  |  |                     if (dataFieldProperty != null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         string dataField = dataFieldProperty.GetValue(column, null) as string; | 
					
						
							|  |  |  |  |                         if (!string.IsNullOrEmpty(dataField) && grid.SummaryData.ContainsKey(dataField)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             sb.AppendFormat("<td>{0}</td>", grid.SummaryData[dataField]); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else if (!string.IsNullOrEmpty(dataField) && dataField == "ProjectName") | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             sb.Append("<td>合计</td>"); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             sb.Append("<td></td>"); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         sb.Append("<td></td>"); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 sb.Append("</tr>"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             sb.Append("</table>"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return sb.ToString(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 获取扁平化的列结构和对应的层级 | 
					
						
							|  |  |  |  |         private int GetFlattenedColumns(GridColumnCollection columns, List<GridColumn> flattenedColumns, List<int> columnLevels, int currentLevel) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             int maxLevel = currentLevel; | 
					
						
							|  |  |  |  |             foreach (GridColumn column in columns) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 flattenedColumns.Add(column); | 
					
						
							|  |  |  |  |                 columnLevels.Add(currentLevel); | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     int childLevel = GetFlattenedColumns(groupField.Columns, flattenedColumns, columnLevels, currentLevel + 1); | 
					
						
							|  |  |  |  |                     if (childLevel > maxLevel) | 
					
						
							|  |  |  |  |                         maxLevel = childLevel; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             return maxLevel; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 计算一个分组列下的叶子节点数量 | 
					
						
							|  |  |  |  |         private int CountLeafColumns(GridColumn column) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 int count = 0; | 
					
						
							|  |  |  |  |                 foreach (GridColumn subColumn in groupField.Columns) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     count += CountLeafColumns(subColumn); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return count; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return 1; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 获取所有叶子节点列 | 
					
						
							|  |  |  |  |         private List<GridColumn> GetLeafColumns(GridColumnCollection columns) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             List<GridColumn> leafColumns = new List<GridColumn>(); | 
					
						
							|  |  |  |  |             foreach (GridColumn column in columns) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     leafColumns.AddRange(GetLeafColumns(groupField.Columns)); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     leafColumns.Add(column); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             return leafColumns; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected void btSearch_Click(object sender, EventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             BindGrid(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |