public ucLabourEntry() { InitializeComponent(); luColEmpNum.DataSource = Employee.ListForCompany().Select(emp => new { EmpNum = emp.EmpNum, DisplayName = emp.DisplayName }).Distinct().ToList(); luColEmpName.DataSource = Employee.ListForCompany().Select(emp => new { EmpNum = emp.EmpNum, DisplayName = emp.DisplayName }).Distinct().ToList(); var wcList = WorkClass.ListForCompany().Select(wc => new { Code = wc.Code, DisplayName = wc.DisplayName }).Distinct().ToList(); luColWorkClass.DataSource = wcList; var codeLevel1List = LevelOneCode.ListForCompany().Select(code => new { MatchId = code.MatchId, Code = code.Code, Desc = code.Desc, DisplayName = code.DisplayName }).Distinct().ToList(); luColLevel1All.DataSource = codeLevel1List.OrderBy(x => x.MatchId); var codeLevel2List = LevelTwoCode.ListForCompany().Select(code => new { MatchId = code.MatchId, Code = code.Code, Desc = code.Desc, DisplayName = code.DisplayName }).Distinct().ToList(); luColLevel2All.DataSource = codeLevel2List.OrderBy(x => x.MatchId); var level3CodeList = LevelThreeCode.ListForCompany().Select(code => new { MatchId = code.MatchId, Code = code.Code, Desc = code.Desc, DisplayName = code.DisplayName }).Distinct().ToList(); luColLevel3All.DataSource = level3CodeList.OrderBy(x => x.MatchId); var level4CodeList = LevelFourCode.ListForCompany().Select(code => new { MatchId = code.MatchId, Code = code.Code, Desc = code.Desc, DisplayName = code.DisplayName }).Distinct().ToList(); luColLevel4All.DataSource = level4CodeList.OrderBy(x => x.MatchId); Func <string, string, int, GridColumn> CreateColumn = new Func <string, string, int, GridColumn>((field, caption, visibleIndex) => { GridColumn column = gvLabour.Columns.AddVisible(field, caption); column.VisibleIndex = visibleIndex; return(column); }); int visionIndex = 0; new List <GridColumn> { colEmpNum, colEmployeeName, colWorkClass, colChangeOrder, colLevel1Code, colLevel2Code, colLevel3Code, colLevel4Code, colBillable, colManual } .ForEach(x => x.VisibleIndex = visionIndex++); foreach (var timecode in TimeCode.SubList(TimeCode.EnumValueType.Hours)) { tableLabour.Columns.Add(BillRateI(timecode), Type.GetType("System.Decimal")); var rateCol = CreateColumn(BillRateI(timecode), $"{timecode.Desc} Bill Rate", visionIndex++); rateCol.DisplayFormat.FormatType = FormatType.Numeric; rateCol.DisplayFormat.FormatString = "c2"; rateCol.OptionsColumn.AllowEdit = false; tableLabour.Columns.Add(EnterHoursI(timecode), Type.GetType("System.Decimal")); var hourCol = CreateColumn(EnterHoursI(timecode), $"{timecode.Desc} Hours", visionIndex++); hourCol.ColumnEdit = textColHours; hourCol.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, hourCol.FieldName, "{0:n2}") }); } foreach (var timecode in TimeCode.SubList(TimeCode.EnumValueType.Dollars)) { tableLabour.Columns.Add(EnterAmountI(timecode), Type.GetType("System.Decimal")); var amountCol = CreateColumn(EnterAmountI(timecode), timecode.Desc, visionIndex++); amountCol.ColumnEdit = textColAmount; } colTotalHours.VisibleIndex = visionIndex++; colBillAmount.VisibleIndex = visionIndex++; int maxLevel = Company.GetCurrCompany().MaxLevelCode; var SetColumn = new Action <GridColumn, int, string>((col, level, caption) => { col.Visible = maxLevel >= level; col.OptionsColumn.ShowInCustomizationForm = maxLevel >= level; col.Caption = caption; }); SetColumn(colLevel4Code, 4, Company.GetCurrCompany().Level4CodeDesc); SetColumn(colLevel3Code, 3, Company.GetCurrCompany().Level3CodeDesc); SetColumn(colLevel2Code, 2, Company.GetCurrCompany().Level2CodeDesc); SetColumn(colLevel1Code, 1, Company.GetCurrCompany().Level1CodeDesc); }