using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Web.UI.WebControls; using BLL; using Model; using Newtonsoft.Json.Linq; using AspNet = System.Web.UI.WebControls; namespace FineUIPro.Web.ZHGL.Performance { public partial class PerformanceAllData : PageBase { #region 定义项 /// /// 主键 /// public string PerformanceGid { get { return (string)ViewState["PerformanceGid"]; } set { ViewState["PerformanceGid"] = value; } } public string CompileDateMonth { get { return (string)ViewState["CompileDateMonth"]; } set { ViewState["CompileDateMonth"] = value; } } public string CreateUser { get { return (string)ViewState["CreateUser"]; } set { ViewState["CreateUser"] = value; } } #endregion protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //根据projectid加载CQMS_Performance表中成功的user数据 BLL.PerformanceService.InitAllUserDropDownList(drpUser, true); CreateUser = Request.QueryString["CreateUser"]; if (!string.IsNullOrEmpty(CreateUser)) { drpUser.SelectedValue = CreateUser; } drpCompileDateMonth.Text = DateTime.Now.ToString(); if (drpUser.SelectedValue != BLL.Const._Null) { // BindGrid(); //OutputSummaryData(); } } } #region 加载数据 public class Grid1Model { public int SortId { get; set; } /// /// 时间 /// public string CreateDateMonth { get; set; } /// /// 项目名称 /// public string ProjectName { get; set; } /// /// 工程范围 /// public string WorkRange { get; set; } /// /// 责任人 /// public string HeadUserid { get; set; } /// /// 工作负荷 /// public decimal? Workloads { get; set; } /// /// 出差天数 /// public int? OutDay { get; set; } public decimal? EvaScore1 { get; set; } public decimal? EvaScore2 { get; set; } public decimal? EvaScore3 { get; set; } public decimal? EvaScore4 { get; set; } public decimal? EvaScore5 { get; set; } public decimal? EvaScore6 { get; set; } /// /// 总得分 /// public decimal? SumZdf { get; set; } } /// /// 加载数据 /// private void BindGrid() { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { //根据年份和查询的人来加载 //去年12月到今年11月 var StartDate = Convert.ToDateTime((Convert.ToInt32(drpCompileDateMonth.Text) - 1).ToString() + "-12"); var EndDate = Convert.ToDateTime(drpCompileDateMonth.Text + "-11"); List listGrid1 = new List(); var Plist = db.CQMS_Performance.Where(x => x.CreateDate >= StartDate && x.CreateDate <= EndDate && x.CreateMan == drpUser.SelectedValue && x.States == "1") .OrderBy(x => x.CreateDate).ToList(); var i = 1; foreach (var item in Plist) { Grid1Model gmodel = new Grid1Model(); gmodel.CreateDateMonth = item.CreateDateMonth; gmodel.ProjectName = ProjectService.GetProjectNameByProjectId(item.ProjectId); gmodel.WorkRange = item.WorkRange; gmodel.HeadUserid = item.HeadUserid; gmodel.Workloads = item.Workloads; gmodel.OutDay = item.OutDay; //加载6个得分 var Child1List = db.CQMS_Performance_Child1.Where(x => x.PerformanceGid == item.PerformanceGid).OrderBy(x => x.SortIndex).ToList(); gmodel.EvaScore1 = Child1List[0].EvaScore; gmodel.EvaScore2 = Child1List[1].EvaScore; gmodel.EvaScore3 = Child1List[2].EvaScore; gmodel.EvaScore4 = Child1List[3].EvaScore; gmodel.EvaScore5 = Child1List[4].EvaScore; gmodel.EvaScore6 = Child1List[5].EvaScore; gmodel.SumZdf = gmodel.EvaScore1 + gmodel.EvaScore2 + gmodel.EvaScore3 + gmodel.EvaScore4 + gmodel.EvaScore5 + gmodel.EvaScore6; gmodel.SortId = i; i += 1; listGrid1.Add(gmodel); } if (listGrid1.Count > 0) { var table = ToDataTable(listGrid1); Grid1.DataSource = table; Grid1.DataBind(); OutputSummaryData(); } else { ShowNotify("未查询到数据。", MessageBoxIcon.Warning); } } } #endregion #region 合计 private void OutputSummaryData() { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { //根据年份和查询的人来加载 //去年12月到今年11月 var StartDate = Convert.ToDateTime((Convert.ToInt32(drpCompileDateMonth.Text) - 1).ToString() + "-12"); var EndDate = Convert.ToDateTime(drpCompileDateMonth.Text + "-11"); List listGrid1 = new List(); var Plist = db.CQMS_Performance.Where(x => x.CreateDate >= StartDate && x.CreateDate <= EndDate && x.CreateMan == drpUser.SelectedValue && x.States == "1") .OrderBy(x => x.CreateDate).ToList(); var i = 1; foreach (var item in Plist) { Grid1Model gmodel = new Grid1Model(); gmodel.CreateDateMonth = item.CreateDateMonth; gmodel.ProjectName = ProjectService.GetProjectNameByProjectId(item.ProjectId); gmodel.WorkRange = item.WorkRange; gmodel.HeadUserid = item.HeadUserid; gmodel.Workloads = item.Workloads; gmodel.OutDay = item.OutDay; //加载6个得分 var Child1List = db.CQMS_Performance_Child1.Where(x => x.PerformanceGid == item.PerformanceGid).OrderBy(x => x.SortIndex).ToList(); gmodel.EvaScore1 = Child1List[0].EvaScore; gmodel.EvaScore2 = Child1List[1].EvaScore; gmodel.EvaScore3 = Child1List[2].EvaScore; gmodel.EvaScore4 = Child1List[3].EvaScore; gmodel.EvaScore5 = Child1List[4].EvaScore; gmodel.EvaScore6 = Child1List[5].EvaScore; gmodel.SumZdf = gmodel.EvaScore1 + gmodel.EvaScore2 + gmodel.EvaScore3 + gmodel.EvaScore4 + gmodel.EvaScore5 + gmodel.EvaScore6; gmodel.SortId = i; i += 1; listGrid1.Add(gmodel); } var table = ToDataTable(listGrid1); double Workloads = 0.0f; int OutDay = 0; double SumZdf = 0.0f; foreach (DataRow row in table.Rows) { var rowWorkloads = row["Workloads"].ToString(); if (rowWorkloads == "") { rowWorkloads = "0"; } var rowSumZdf = row["SumZdf"].ToString(); if (rowSumZdf == "") { rowSumZdf = "0"; } var rowOutDay = row["OutDay"].ToString(); if (rowOutDay == "") { rowOutDay = "0"; } Workloads += Convert.ToDouble(rowWorkloads); OutDay += Convert.ToInt32(rowOutDay); SumZdf += Convert.ToDouble(rowSumZdf); } JObject summary = new JObject(); summary.Add("CreateDateMonth", "总计"); summary.Add("Workloads", Workloads.ToString("F2")); summary.Add("OutDay", OutDay.ToString()); summary.Add("SumZdf", SumZdf.ToString("F2")); Grid1.SummaryData = summary; } } #endregion #region list转换datatable /// /// Convert a List{T} to a DataTable. /// private DataTable ToDataTable(List items) { var tb = new DataTable(typeof(T).Name); PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in props) { Type t = GetCoreType(prop.PropertyType); tb.Columns.Add(prop.Name, t); } foreach (T item in items) { var values = new object[props.Length]; for (int i = 0; i < props.Length; i++) { values[i] = props[i].GetValue(item, null); } tb.Rows.Add(values); } return tb; } /// /// Determine of specified type is nullable /// public static bool IsNullable(Type t) { return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)); } /// /// Return underlying type if type is Nullable otherwise return the type /// public static Type GetCoreType(Type t) { if (t != null && IsNullable(t)) { if (!t.IsValueType) { return t; } else { return Nullable.GetUnderlyingType(t); } } else { return t; } } #endregion protected void drpUser_SelectedIndexChanged(object sender, EventArgs e) { //if (drpUser.SelectedValue == BLL.Const._Null) //{ // ShowNotify("请选择要打分的施工工程师。", MessageBoxIcon.Warning); // return; //} //if (string.IsNullOrEmpty(drpCompileDateMonth.Text)) //{ // ShowNotify("请选择年份。", MessageBoxIcon.Warning); // return; //} //BindGrid(); } #region 导出excel #region 导出excel /// /// 格式化html /// /// /// private string GetGridTableHtml(Grid grid) { StringBuilder sb = new StringBuilder(); MultiHeaderTable mht = new MultiHeaderTable(); mht.ResolveMultiHeaderTable(Grid1.Columns); sb.Append(""); sb.Append(""); ////列数 //var rowCount = ""; //var list = Funs.DB.Base_Project.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).OrderBy(x => x.ProjectCode).ToList(); //for (int i = 0; i < list.Count; i++) //{ // rowCount+="{}" //} foreach (List rows in mht.MultiTable) { sb.Append(""); foreach (object[] cell in rows) { int rowspan = Convert.ToInt32(cell[0]); int colspan = Convert.ToInt32(cell[1]); GridColumn column = cell[2] as GridColumn; sb.AppendFormat("{3}", rowspan != 1 ? " rowspan=\"" + rowspan + "\"" : "", colspan != 1 ? " colspan=\"" + colspan + "\"" : "", colspan != 1 ? " style=\"text-align:center;\"" : "", column.HeaderText); } sb.Append(""); } int i = 0; foreach (GridRow row in grid.Rows) { sb.Append(""); string MenuC = ""; int y = 1; foreach (GridColumn column in mht.Columns) { string html = row.Values[column.ColumnIndex].ToString(); sb.AppendFormat("", html); #endregion y += 1; } i += 1; sb.Append(""); } sb.Append("
{0}
"); return sb.ToString(); } public static string MidStrEx(string sourse, string startstr, string endstr) { string result = string.Empty; int startindex, endindex; try { startindex = sourse.IndexOf(startstr); if (startindex == -1) return result; string tmpstr = sourse.Substring(startindex + startstr.Length); endindex = tmpstr.IndexOf(endstr); if (endindex == -1) return result; result = tmpstr.Remove(endindex); } catch (Exception ex) { } return result; } #region 多表头处理 /// /// 处理多表头的类 /// public class MultiHeaderTable { // 包含 rowspan,colspan 的多表头,方便生成 HTML 的 table 标签 public List> MultiTable = new List>(); // 最终渲染的列数组 public List Columns = new List(); public void ResolveMultiHeaderTable(GridColumnCollection columns) { List row = new List(); foreach (GridColumn column in columns) { object[] cell = new object[4]; cell[0] = 1; // rowspan cell[1] = 1; // colspan cell[2] = column; cell[3] = null; row.Add(cell); } ResolveMultiTable(row, 0); ResolveColumns(row); } private void ResolveColumns(List row) { foreach (object[] cell in row) { GroupField groupField = cell[2] as GroupField; if (groupField != null && groupField.Columns.Count > 0) { List subrow = new List(); foreach (GridColumn column in groupField.Columns) { subrow.Add(new object[] { 1, 1, column, groupField }); } ResolveColumns(subrow); } else { Columns.Add(cell[2] as GridColumn); } } } private void ResolveMultiTable(List row, int level) { List nextrow = new List(); foreach (object[] cell in row) { GroupField groupField = cell[2] as GroupField; if (groupField != null && groupField.Columns.Count > 0) { // 如果当前列包含子列,则更改当前列的 colspan,以及增加父列(向上递归)的colspan cell[1] = Convert.ToInt32(groupField.Columns.Count); PlusColspan(level - 1, cell[3] as GridColumn, groupField.Columns.Count - 1); foreach (GridColumn column in groupField.Columns) { nextrow.Add(new object[] { 1, 1, column, groupField }); } } } MultiTable.Add(row); // 如果当前下一行,则增加上一行(向上递归)中没有子列的列的 rowspan if (nextrow.Count > 0) { PlusRowspan(level); ResolveMultiTable(nextrow, level + 1); } } private void PlusRowspan(int level) { if (level < 0) { return; } foreach (object[] cells in MultiTable[level]) { GroupField groupField = cells[2] as GroupField; if (groupField != null && groupField.Columns.Count > 0) { // ... } else { cells[0] = Convert.ToInt32(cells[0]) + 1; } } PlusRowspan(level - 1); } private void PlusColspan(int level, GridColumn parent, int plusCount) { if (level < 0) { return; } foreach (object[] cells in MultiTable[level]) { GridColumn column = cells[2] as GridColumn; if (column == parent) { cells[1] = Convert.ToInt32(cells[1]) + plusCount; PlusColspan(level - 1, cells[3] as GridColumn, plusCount); } } } } #endregion /// /// 导出exccel /// /// /// protected void btnOut_Click(object sender, EventArgs e) { Response.ClearContent(); var excelDate = drpCompileDateMonth.Text + "年"; var uName = drpUser.SelectedText; var FileName = excelDate + "施工工程师(" + uName + ")施工管理绩效数据收集"; Response.AddHeader("content-disposition", "attachment; filename=" + FileName + ".xls"); Response.ContentType = "application/vnd.ms-excel"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.Write(GetGridTableHtml(Grid1)); Response.End(); } #endregion /// /// 查询绑定数据 /// /// /// protected void btnBindGrid(object sender, EventArgs e) { if (drpUser.SelectedValue == BLL.Const._Null) { ShowNotify("请选择要打分的施工工程师。", MessageBoxIcon.Warning); return; } if (string.IsNullOrEmpty(drpCompileDateMonth.Text)) { ShowNotify("请选择年份。", MessageBoxIcon.Warning); return; } BindGrid(); } } }