实际上,我遇到一个统计的需求. 项目个数不确定(可维护),人员个数不确定(可维护)
行列都不确定的情况下.要统计每个人每天项目所使用时间的数据..最后使用动态table 完成功能.
效果:
后台:
public ActionResult Search(string CreatetimeS, string CreatetimeE, string Project, Guid? Createby) { ListEM_Employees = db.EM_Employee.ToList(); ViewBag.Createby = new SelectList(EM_Employees, "EmID", "EMRealName"); List SYS_DD_Projects = db.SYS_DD.Where(dd => dd.DDType == "Project").OrderBy(dd => dd.DDCode).ToList(); ViewBag.Project = new SelectList(SYS_DD_Projects, "DDCode", "DDName"); if (Createby != null) { EM_Employees = EM_Employees.Where(em => em.EmID == Createby).ToList(); } if (!string.IsNullOrEmpty(Project)) { SYS_DD_Projects = SYS_DD_Projects.Where(s => s.DDCode == Project).ToList(); } DataTable dt = DataTableCalculate(Convert.ToDateTime(CreatetimeS), Convert.ToDateTime(CreatetimeE), EM_Employees, SYS_DD_Projects); //return Json("json"); return View("Index", dt); } private DataTable DataTableCalculate(DateTime startTime, DateTime endTime, List EM_Employees, List SYS_DD_Projects) { DataTable dt = new DataTable(); dt.Columns.Add("Employees"); foreach (var Project in SYS_DD_Projects) { dt.Columns.Add(Project.DDName); } foreach (var Employee in EM_Employees) { var row = dt.NewRow(); row["Employees"] = Employee.EMRealName; foreach (var Project in SYS_DD_Projects) { row[Project.DDName] = db.Hours.Where(h => h.Createtime >= startTime && h.Createtime <= endTime && h.Createby == Employee.EmID && h.Project == Project.DDCode) .Sum(h => (double?)h.SpendHours); } dt.Rows.Add(row); } return dt; }
前台:
@model System.Data.DataTable@if (Model != null){
@column.ColumnName | }
---|
@row[column.ColumnName] | }