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 绑定数据 /// /// 绑定数据 /// 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(); 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 totalManagementList = BLL.InspectionManagementService.getViewMonthReportInspectionManagementByCNProfessionalIdAndDate(project.ProjectId, null, Convert.ToDateTime("2015-01-01"), DateTime.Now, false); //专业下当期集合 List 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(); value3 = managementList1.Count(x => x.IsOnceQualified == true); value4 = totalManagementList1.Count(x => x.IsOnceQualified == true); 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(); value9 = managementList2.Count(x => x.IsOnceQualified == true); value10 = totalManagementList2.Count(x => x.IsOnceQualified == true); 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(); value15 = managementList3.Count(x => x.IsOnceQualified == true); value16 = totalManagementList3.Count(x => x.IsOnceQualified == true); 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(); value21 = managementList4.Count(x => x.IsOnceQualified == true); value22 = totalManagementList4.Count(x => x.IsOnceQualified == true); 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(); value27 = managementList5.Count(x => x.IsOnceQualified == true); value28 = totalManagementList5.Count(x => x.IsOnceQualified == true); 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 数据操作 /// /// 分页 /// /// /// protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { this.BindGrid(); } /// /// 排序 /// /// /// protected void Grid1_Sort(object sender, GridSortEventArgs e) { this.BindGrid(); } /// /// 分页显示条数下拉框 /// /// /// protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); this.BindGrid(); } #endregion #region 关闭弹出窗 /// /// 关闭弹出窗 /// /// /// protected void Window1_Close(object sender, WindowCloseEventArgs e) { BindGrid(); } #endregion #region 导出按钮 /// 导出按钮 /// /// /// 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(); } /// /// 导出方法 /// /// /// private string GetGridTableHtml(Grid grid) { StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append(""); // 收集所有列信息,包括嵌套的列 List flattenedColumns = new List(); List columnLevels = new List(); int maxLevel = GetFlattenedColumns(grid.Columns, flattenedColumns, columnLevels, 0); // 生成表头 for (int level = 0; level <= maxLevel; level++) { sb.Append(""); 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("", rowspan, cellValue); } else { sb.AppendFormat("", colspan, cellValue); } // 跳过已处理的子列 if (colspan > 1) { i += colspan; } else { i++; } } else if (columnLevel < level && !(column is GroupField)) { // 已经由rowspan处理的单元格,跳过 i++; } else { i++; } } sb.Append(""); } // 添加数据行 foreach (GridRow row in grid.Rows) { sb.Append(""); List 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("", html); } sb.Append(""); } // 添加合计行 if (grid.SummaryData != null) { sb.Append(""); List 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("", grid.SummaryData[dataField]); } else if (!string.IsNullOrEmpty(dataField) && dataField == "ProjectName") { sb.Append(""); } else { sb.Append(""); } } else { sb.Append(""); } } sb.Append(""); } sb.Append("
{1}{1}
{0}
{0}合计
"); return sb.ToString(); } // 获取扁平化的列结构和对应的层级 private int GetFlattenedColumns(GridColumnCollection columns, List flattenedColumns, List 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 GetLeafColumns(GridColumnCollection columns) { List leafColumns = new List(); 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(); } } }