private void RefreshACICategoriesGrid(AccessControlItemCategory selectedItem) { bool foundSelection = false; try { #region General setup Application.DoEvents(); dgvACICategories.SuspendLayout(); _refreshingCategories = true; #endregion #region Datasource/Action handling List <AccessControlItemCategory> dataSourceList = null; var selectedUser = GetSelectedUser(); if (selectedUser != null) { dataSourceList = (from c in (from i in ACIItems join l in UserACIList.FindAll(ac => ac.UserId == selectedUser.Id) on i.Id equals l.AccessControlListId into il join x in GroupACIList.FindAll(ac => UserGroupList.Find(x => x.GroupId == ac.GroupId && x.UserId == selectedUser.Id) != null) on i.Id equals x.AccessControlListId into ix select new { i.Category, GrantedACI = il.Count(), GrantedGroupACI = ix.Count() }) group c by c.Category into g select new AccessControlItemCategory(g.Key, g.Sum(c => c.GrantedACI) == 0 ? -1 : g.Sum(c => c.GrantedACI) == g.Count(c => c.Category != null) ? 1 : 0, g.Count(c => c.Category != null), g.Sum(c => c.GrantedACI), g.Sum(c => c.GrantedGroupACI) )).ToList(); } else { dataSourceList = (from c in ACIItems group c by c.Category into g select new AccessControlItemCategory(g.Key, -1, g.Count(c => c.Category != null), 0, 0)).ToList(); } #endregion #region Datagrid filling and generation if (dataSourceList?.Count > 0) { dgvACICategories.DataSource = new SortableBindingList <AccessControlItemCategory>(dataSourceList); if (dgvACICategories.SortedColumn == null) { dgvACICategories.Sort(dgvACICategories.Columns[0], ListSortDirection.Ascending); } for (int i = 0; i < dgvACICategories.Rows.Count; i++) { var dataBoundItem = (AccessControlItemCategory)dgvACICategories.Rows[i].DataBoundItem; if ((selectedItem != null) && (dataBoundItem.Category == selectedItem.Category)) { dgvACICategories.Rows[i].Selected = true; foundSelection = true; break; } } } else { dgvACICategories.DataSource = null; } #endregion } catch (Exception ex) { Trace.WriteError("()", Trace.GetMethodName(), CLASSNAME, ex); DisplayError(Trace.GetMethodName(), TranslationKey.CommonMessage_InternalError, ex); } finally { if (selectedItem == null || !foundSelection) { dgvACICategories.ClearSelection(); } dgvACICategories.ResumeLayout(); _refreshingCategories = false; RefreshACIGrid(GetSelectedACI()); } }
private void RefreshACIGrid(AccessControlItem selectedItem) { bool foundSelection = false; try { #region General setup Application.DoEvents(); dgvACI.SuspendLayout(); #endregion #region Datasource/Action handling List <AccessControlItemHelper> dataSourceList = null; var selectedUser = GetSelectedUser(); var selectedCategory = GetSelectedACICategory(); if (selectedUser != null && selectedCategory != null) { dataSourceList = (from i in ACIItems join l in UserACIList.FindAll(ac => ac.UserId == selectedUser.Id) on i.Id equals l.AccessControlListId into il join x in GroupACIList.FindAll(ac => UserGroupList.Find(x => x.GroupId == ac.GroupId && x.UserId == selectedUser.Id) != null) on i.Id equals x.AccessControlListId into ix where i.Category == selectedCategory.Category select new AccessControlItemHelper(i.Id, i.Category, i.Action, il.Any(), ix.Any())).ToList(); } #endregion #region Datagrid filling and generation if (dataSourceList?.Count > 0) { dgvACI.DataSource = new SortableBindingList <AccessControlItemHelper>(dataSourceList); if (dgvACI.SortedColumn == null) { dgvACI.Sort(dgvACI.Columns[1], ListSortDirection.Ascending); } for (int i = 0; i < dgvACI.Rows.Count; i++) { var dataBoundItem = (AccessControlItem)dgvACI.Rows[i].DataBoundItem; if ((selectedItem != null) && (dataBoundItem.Id == selectedItem.Id)) { dgvACI.Rows[i].Selected = true; foundSelection = true; } } } else { dgvACI.DataSource = null; } #endregion } catch (Exception ex) { Trace.WriteError("()", Trace.GetMethodName(), CLASSNAME, ex); DisplayError(Trace.GetMethodName(), TranslationKey.CommonMessage_InternalError, ex); } finally { if (selectedItem == null || !foundSelection) { dgvACI.ClearSelection(); } dgvACI.ResumeLayout(); } }