private GovernorateViewModel GetGridAsDataTable(int[] regionsandgov, int[] years, int[] activities, string lang) { List <List <object> > dataRows = new List <List <object> >(); DataTable dataTable = new DataTable(); //default Columns dataTable.Columns.Add("DFIndicatorId"); dataTable.Columns.Add("Unit"); dataTable.Columns.Add("DFGovernorateId"); dataTable.Columns.Add("DFRegions"); dataTable.Columns.Add("DFYearId"); List <string> headers = new List <string>(); //default headers headers.Add("DFIndicatorId"); headers.Add("Unit"); headers.Add("DFGovernorateId"); headers.Add("DFRegions"); headers.Add("DFYearId"); //add Columns and headers sent by activities ids _db.DFSectors.OrderBy(x => x.Order ?? 0).Where(x => activities.Contains(x.Id)).ToList().ForEach(item => { dataTable.Columns.Add(item.Name); headers.Add(item.Name); }); //get Governorates filterd by regionsandgov and years var query = _db.Governorates.Include(x => x.DFGovernorate.DFRegion).Include(x => x.DFGovernorate).Include(x => x.DFYear).Include(x => x.DFIndicator) .Where(x => !(x.isDeleted ?? false) && (years.Length == 0 || years.Contains(x.DFYear.Id)) && (regionsandgov.Length == 0 || regionsandgov.Contains(x.DFGovernorate.Id)) ).OrderByDescending(x => x.DFYearId).ToList(); if (lang == null || lang.ToLower() == "ar") { query.ForEach(x => { List <object> row = new List <object>(); //put values to corresponding headers foreach (var item in headers) { switch (item) { case "DFIndicatorId": row.Add(x.DFIndicator.GetType().GetProperty("NameAr").GetValue(x.DFIndicator, null).ToString()); break; //todo:unit forigen key case "Unit": row.Add("الف جنيه"); break; case "DFGovernorateId": row.Add(x.DFGovernorate.GetType().GetProperty("NameAr").GetValue(x.DFGovernorate, null).ToString()); break; case "DFRegions": row.Add(x.DFGovernorate.DFRegion.GetType().GetProperty("NameAr").GetValue(x.DFGovernorate.DFRegion, null).ToString()); break; case "DFYearId": row.Add(x.DFYear.GetType().GetProperty("NameAr").GetValue(x.DFYear, null).ToString()); break; default: var obj = x.GetType().GetProperty(item).GetValue(x, null); //row.Add(obj != null ? obj.ToString() : "N/A"); double num; var numFlag = double.TryParse("" + obj, out num); if (numFlag) { num = Math.Round(num, 2); row.Add(num); } else { row.Add(obj != null ? obj : "N/A"); } break; } } dataRows.Add(row); }); } else { query.ForEach(x => { List <object> row = new List <object>(); foreach (var item in headers) { switch (item) { case "DFIndicatorId": row.Add(x.DFIndicator.GetType().GetProperty("NameEn").GetValue(x.DFIndicator, null).ToString()); break; case "Unit": row.Add(x.GetType().GetProperty("Unit").GetValue(x, null).ToString()); break; case "DFGovernorateId": row.Add(x.DFGovernorate.GetType().GetProperty("NameEn").GetValue(x.DFGovernorate, null).ToString()); break; case "DFRegions": row.Add(x.DFGovernorate.DFRegion.GetType().GetProperty("NameEn").GetValue(x.DFGovernorate.DFRegion, null).ToString()); break; case "DFYearId": row.Add(x.DFYear.GetType().GetProperty("NameEn").GetValue(x.DFYear, null).ToString()); break; default: var obj = x.GetType().GetProperty(item).GetValue(x, null); double num; var numFlag = double.TryParse("" + obj, out num); if (numFlag) { num = Math.Round(num, 2); row.Add(num); } else { row.Add(obj != null ? obj : "N/A"); } break; } } dataRows.Add(row); }); } //get localize columns names headers = LocalizeColumnNames(headers, lang); GovernorateViewModel tableResult = new GovernorateViewModel(headers, dataRows); return(tableResult); }
public GovernorateViewModel GetFilterdGovernoratesForGrid(int[] regionsandgov, int[] years, int[] activities, string lang) { GovernorateViewModel dataTable = GetGridAsDataTable(regionsandgov, years, activities, lang); return(dataTable); }