| 
									
										
										
										
											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 WeldingData : 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; | 
					
						
							|  |  |  |  |                 int value5 = 0; | 
					
						
							|  |  |  |  |                 int value6 = 0; | 
					
						
							|  |  |  |  |                 int value7 = 0; | 
					
						
							|  |  |  |  |                 int value8 = 0; | 
					
						
							|  |  |  |  |                 int value9 = 0; | 
					
						
							|  |  |  |  |                 int value10 = 0; | 
					
						
							|  |  |  |  |                 int value11 = 0; | 
					
						
							|  |  |  |  |                 int value12 = 0; | 
					
						
							|  |  |  |  |                 string value13 = "0%"; | 
					
						
							|  |  |  |  |                 string value14 = "0%"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region 管道、钢结构、设备、其他焊工 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 var query1 = from c in db.Comprehensive_InspectionPerson | 
					
						
							|  |  |  |  |                     join cn in db.Base_CNProfessional on c.CNProfessionalId equals cn.CNProfessionalId into cnJoin | 
					
						
							|  |  |  |  |                     from cn in cnJoin.DefaultIfEmpty() | 
					
						
							|  |  |  |  |                     join p in db.Base_Post on c.PostId equals p.PostId into postJoin | 
					
						
							|  |  |  |  |                     from p in postJoin.DefaultIfEmpty() | 
					
						
							|  |  |  |  |                     where c.ProjectId == project.ProjectId | 
					
						
							|  |  |  |  |                     select new | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         c.InspectionPersonId, | 
					
						
							|  |  |  |  |                         c.ProjectId, | 
					
						
							|  |  |  |  |                         c.PersonName, | 
					
						
							|  |  |  |  |                         c.ApprovalTime, | 
					
						
							|  |  |  |  |                         cn.ProfessionalName, | 
					
						
							|  |  |  |  |                         p.PostName | 
					
						
							|  |  |  |  |                     }; | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 var totalWelderList = query1.ToList(); | 
					
						
							|  |  |  |  |                 var welderList = query1.Where(x => x.ApprovalTime >= firstDayOfMonth); | 
					
						
							|  |  |  |  |                 value1 = welderList.Count(x => x.ProfessionalName == "管道" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value2 = totalWelderList.Count(x => x.ProfessionalName == "管道" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value3 = welderList.Count(x => x.ProfessionalName == "土建" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value4 = totalWelderList.Count(x => x.ProfessionalName == "土建" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value5 = welderList.Count(x => x.ProfessionalName == "设备" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value6 = totalWelderList.Count(x => x.ProfessionalName == "设备" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value7 = welderList.Count(x => x.ProfessionalName != "管道" && x.ProfessionalName != "土建" && x.ProfessionalName != "设备" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  |                 value8 = totalWelderList.Count(x => x.ProfessionalName != "管道" && x.ProfessionalName != "土建" && x.ProfessionalName != "设备" && x.PostName == "焊工"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion  | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region PQR/WPS报验 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-22 10:38:41 +08:00
										 |  |  |  |                 var query = (from x in db.Report_Construction_Plan | 
					
						
							|  |  |  |  |                     join y in db.Report_WeekAndMonthReport_New on x.ReportId equals y.Id into yJoin | 
					
						
							|  |  |  |  |                     from y in yJoin.DefaultIfEmpty() | 
					
						
							|  |  |  |  |                     where y.ProjectId == project.ProjectId && x.ReType == "5" | 
					
						
							|  |  |  |  |                     select new | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         x.Quantity1, | 
					
						
							|  |  |  |  |                         x.Quantity2, | 
					
						
							|  |  |  |  |                         x.Quantity3, | 
					
						
							|  |  |  |  |                         x.QuaRate, | 
					
						
							|  |  |  |  |                         y.CreateDate | 
					
						
							|  |  |  |  |                     }).ToList(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 var sum1 = query.Sum(x => x.Quantity1 ?? 0); | 
					
						
							|  |  |  |  |                 var sum2 = query.Sum(x => x.Quantity2 ?? 0); | 
					
						
							|  |  |  |  |                 var sum3 = query.Sum(x => x.Quantity3 ?? 0); | 
					
						
							|  |  |  |  |                 value10 = sum1 + sum2 + sum3; | 
					
						
							|  |  |  |  |                 var sum4 = query.Where(x => x.CreateDate >= firstDayOfMonth).Sum(x => x.Quantity1 ?? 0); | 
					
						
							|  |  |  |  |                 var sum5 = query.Where(x => x.CreateDate >= firstDayOfMonth).Sum(x => x.Quantity2 ?? 0); | 
					
						
							|  |  |  |  |                 var sum6 = query.Where(x => x.CreateDate >= firstDayOfMonth).Sum(x => x.Quantity3 ?? 0); | 
					
						
							|  |  |  |  |                 value9 = sum4 + sum5 + sum6; | 
					
						
							| 
									
										
										
										
											2025-08-21 17:43:07 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #endregion | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 #region 无损检测管理 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 var query2 = from c in db.ProcessControl_NondestructiveTest_New | 
					
						
							|  |  |  |  |                     where c.ProjectId == project.ProjectId | 
					
						
							|  |  |  |  |                     orderby c.CreateDate descending | 
					
						
							|  |  |  |  |                     select new | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         c.CreateDate, | 
					
						
							|  |  |  |  |                         c.ProjectId, | 
					
						
							|  |  |  |  |                         c.ProfessionalName, | 
					
						
							|  |  |  |  |                         c.MonthQuantity, | 
					
						
							|  |  |  |  |                         c.TotalQuantity, | 
					
						
							|  |  |  |  |                         c.MonthRate, | 
					
						
							|  |  |  |  |                         c.TotalRate | 
					
						
							|  |  |  |  |                     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (query2.Count()>0) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     var data1 = query2.FirstOrDefault(x => x.ProfessionalName == "工艺管道"); | 
					
						
							|  |  |  |  |                     var data2 = query2.FirstOrDefault(x => x.ProfessionalName == "地管"); | 
					
						
							|  |  |  |  |                     var data3 = query2.FirstOrDefault(x => x.ProfessionalName == "非标"); | 
					
						
							|  |  |  |  |                     value11 = (int)((data1?.MonthQuantity ?? 0) + (data2?.MonthQuantity ?? 0) + (data3?.MonthQuantity ?? 0)); | 
					
						
							|  |  |  |  |                     value12 = (int)((data1?.TotalQuantity ?? 0) + (data2?.TotalQuantity ?? 0) + (data3?.TotalQuantity ?? 0)); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 #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, // PQR/WPS报验本月 | 
					
						
							|  |  |  |  |                     Value10 = value10, // PQR/WPS报验累计 | 
					
						
							|  |  |  |  |                     Value11 = value11, // 本月拍片数 | 
					
						
							|  |  |  |  |                     Value12 = value12, // 累计拍片数 | 
					
						
							|  |  |  |  |                     Value13 = value13, // 本月一次合格率 | 
					
						
							|  |  |  |  |                     Value14 = value14, // 累计一次合格率 | 
					
						
							|  |  |  |  |                 }); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             var pagedResult = result.Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize).ToList(); | 
					
						
							|  |  |  |  |             Grid1.RecordCount = result.Count; | 
					
						
							|  |  |  |  |             Grid1.DataSource = pagedResult; | 
					
						
							|  |  |  |  |             Grid1.DataBind(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             JObject summary = new JObject(); | 
					
						
							|  |  |  |  |             summary.Add("ProjectName", "合计"); | 
					
						
							|  |  |  |  |             summary.Add("Value1", pagedResult.Sum(p => p.Value1)); | 
					
						
							|  |  |  |  |             summary.Add("Value2", pagedResult.Sum(p => p.Value2)); | 
					
						
							|  |  |  |  |             summary.Add("Value3", pagedResult.Sum(p => p.Value3)); | 
					
						
							|  |  |  |  |             summary.Add("Value4", pagedResult.Sum(p => p.Value4)); | 
					
						
							|  |  |  |  |             summary.Add("Value5", pagedResult.Sum(p => p.Value5)); | 
					
						
							|  |  |  |  |             summary.Add("Value6", pagedResult.Sum(p => p.Value6)); | 
					
						
							|  |  |  |  |             summary.Add("Value7", pagedResult.Sum(p => p.Value7)); | 
					
						
							|  |  |  |  |             summary.Add("Value8", pagedResult.Sum(p => p.Value8)); | 
					
						
							|  |  |  |  |             summary.Add("Value9", pagedResult.Sum(p => p.Value9)); | 
					
						
							|  |  |  |  |             summary.Add("Value10", pagedResult.Sum(p => p.Value10)); | 
					
						
							|  |  |  |  |             summary.Add("Value11", pagedResult.Sum(p => p.Value11)); | 
					
						
							|  |  |  |  |             summary.Add("Value12", pagedResult.Sum(p => p.Value12)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             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;\">"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 计算总列数,用于处理表头 | 
					
						
							|  |  |  |  |             int totalColumns = 0; | 
					
						
							|  |  |  |  |             foreach (GridColumn column in grid.Columns) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     totalColumns += groupField.Columns.Count; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     totalColumns += 1; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 第一行表头 - 居中显示 | 
					
						
							|  |  |  |  |             sb.Append("<tr>"); | 
					
						
							|  |  |  |  |             foreach (GridColumn column in grid.Columns) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     // 对于分组列,使用colspan跨越子列数量,文本居中 | 
					
						
							|  |  |  |  |                     sb.AppendFormat("<td colspan=\"{0}\" align=\"center\">{1}</td>", groupField.Columns.Count, | 
					
						
							|  |  |  |  |                         groupField.HeaderText); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     // 普通列,跨两行,文本居中 | 
					
						
							|  |  |  |  |                     sb.AppendFormat("<td rowspan=\"2\" align=\"center\">{0}</td>", column.HeaderText); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             sb.Append("</tr>"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 第二行表头(仅包含分组列的子列)- 居中显示 | 
					
						
							|  |  |  |  |             bool hasGroupColumns = grid.Columns.Any(c => c is GroupField && ((GroupField)c).Columns != null); | 
					
						
							|  |  |  |  |             if (hasGroupColumns) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 sb.Append("<tr>"); | 
					
						
							|  |  |  |  |                 foreach (GridColumn column in grid.Columns) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 添加分组列的子列标题,居中显示 | 
					
						
							|  |  |  |  |                         foreach (GridColumn subColumn in groupField.Columns) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             sb.AppendFormat("<td align=\"center\">{0}</td>", subColumn.HeaderText); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 sb.Append("</tr>"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 添加数据行 | 
					
						
							|  |  |  |  |             foreach (GridRow row in grid.Rows) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 sb.Append("<tr>"); | 
					
						
							|  |  |  |  |                 foreach (GridColumn column in grid.Columns) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 处理分组列中的每个子列 | 
					
						
							|  |  |  |  |                         foreach (GridColumn subColumn in groupField.Columns) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             string html = row.Values[subColumn.ColumnIndex].ToString(); | 
					
						
							|  |  |  |  |                             if (subColumn.ColumnID == "tfNumber") | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 html = (row.FindControl("lblNumber") as System.Web.UI.WebControls.Label).Text; | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                             sb.AppendFormat("<td>{0}</td>", html); | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 处理普通列 | 
					
						
							|  |  |  |  |                         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;\">"); | 
					
						
							|  |  |  |  |                 foreach (GridColumn column in grid.Columns) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (column is GroupField groupField && groupField.Columns != null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 处理分组列中的每个子列 | 
					
						
							|  |  |  |  |                         foreach (GridColumn subColumn in groupField.Columns) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             // 使用反射获取DataField属性值,避免编译错误 | 
					
						
							|  |  |  |  |                             var dataFieldProperty = subColumn.GetType().GetProperty("DataField"); | 
					
						
							|  |  |  |  |                             if (dataFieldProperty != null) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 string dataField = dataFieldProperty.GetValue(subColumn, null) as string; | 
					
						
							|  |  |  |  |                                 if (!string.IsNullOrEmpty(dataField) && grid.SummaryData.ContainsKey(dataField)) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     sb.AppendFormat("<td>{0}</td>", grid.SummaryData[dataField]); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							|  |  |  |  |                                 else | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     sb.Append("<td></td>"); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             else | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 sb.Append("<td></td>"); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         // 处理普通列 | 
					
						
							|  |  |  |  |                         // 使用反射获取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(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected void btSearch_Click(object sender, EventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             BindGrid(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |