private DataTable GetMengurusExcel() { DataTable dt = new DataTable(); try { List <BudgetMengurusYearEnd> data = new BudgetMengurusDAL().BudgetMengurusYearEnd(Convert.ToInt32(ddlBudgetYear.SelectedValue)); List <string> acccodes = data.Select(x => x.AccountCode).Distinct().OrderBy(x => x).ToList(); List <string> prefixs = data.Select(x => x.Prefix).Distinct().OrderBy(x => x).ToList(); List <string> periods = data.Select(x => x.PeriodMengurus).Distinct().OrderBy(x => x).ToList(); //Start Build DataTable DataColumn dc = new DataColumn(); foreach (Segment seg in new SegmentDAL().GetSegments().OrderBy(x => x.SegmentOrder)) { dc = new DataColumn(seg.SegmentName); dt.Columns.Add(dc); } dc = new DataColumn("AccountCode"); dt.Columns.Add(dc); dc = new DataColumn("Objeck"); dt.Columns.Add(dc); dc = new DataColumn("Description"); dt.Columns.Add(dc); foreach (string pe in periods) { dc = new DataColumn(pe); dt.Columns.Add(dc); } //End Build DataTable //Start pushing data into DataTable foreach (string pr in prefixs) { foreach (string ac in acccodes) { List <BudgetMengurusYearEnd> subset = data.Where(x => x.AccountCode == ac && x.Prefix == pr).ToList(); if (subset.Count > 0) { int c = 0; DataRow dr = dt.NewRow(); foreach (string sgd in subset[0].ListSegmentDetails) { dr[c] = sgd; c++; } dr[c] = ac; c++; dr[c] = pr + "-" + ac; c++; dr[c] = subset[0].Description; c++; foreach (string pe in periods) { BudgetMengurusYearEnd d = subset.Where(x => x.PeriodMengurus == pe).FirstOrDefault(); if (d != null) { dr[c] = d.Amount.ToString("F"); } else { dr[c] = string.Empty; } c++; } dt.Rows.Add(dr); } } } //End pushing data into DataTable } catch (Exception ex) { ((SiteMaster)this.Master).ShowMessage("Error", "An error occurred", ex, true); } return(dt); }