/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var rockContext = new RockContext(); var campaignConnectionItems = Rock.Web.SystemSettings.GetValue(CampaignConnectionKey.CAMPAIGN_CONNECTION_CONFIGURATION).FromJsonOrNull <List <CampaignItem> >() ?? new List <CampaignItem>(); var relatedOpportunityIds = campaignConnectionItems.Select(a => a.OpportunityGuid).ToList(); List <ConnectionOpportunity> relatedOpportunities = new List <ConnectionOpportunity>(); Dictionary <Guid, int> activeOpportunityRequests = new Dictionary <Guid, int>(); if (relatedOpportunityIds.Any()) { var connectionOpportunityService = new ConnectionOpportunityService(rockContext); var connectionRequestService = new ConnectionRequestService(rockContext); var connectionRequestsQry = connectionRequestService.Queryable(); relatedOpportunities = connectionOpportunityService.GetListByGuids(relatedOpportunityIds); foreach (var connectionOpportunity in relatedOpportunities) { var activeRequestCount = connectionRequestsQry .Where(a => a.ConnectionOpportunityId == connectionOpportunity.Id && (a.ConnectionState == ConnectionState.Active || (a.ConnectionState == ConnectionState.FutureFollowUp && a.FollowupDate.HasValue && a.FollowupDate.Value < _midnightToday))) .Count(); activeOpportunityRequests.AddOrReplace(connectionOpportunity.Guid, activeRequestCount); } } var relatedDataViewIds = campaignConnectionItems.Select(a => a.DataViewGuid).ToList(); List <DataView> relatedDataViews = new List <DataView>(); if (relatedDataViewIds.Any()) { var dataViewService = new DataViewService(rockContext); relatedDataViews = dataViewService.GetListByGuids(relatedDataViewIds); } var campaignConnectionRows = new List <CampaignConnectionRow>(); var entitySetItemQry = new EntitySetItemService(rockContext).Queryable(); foreach (var campaignConnectionItem in campaignConnectionItems) { var campaignConnectionRow = new CampaignConnectionRow(); campaignConnectionRow.Guid = campaignConnectionItem.Guid; campaignConnectionRow.Name = campaignConnectionItem.Name; campaignConnectionRow.ConnectionOpportunity = relatedOpportunities.FirstOrDefault(a => a.Guid == campaignConnectionItem.OpportunityGuid); campaignConnectionRow.DataView = relatedDataViews.FirstOrDefault(a => a.Guid == campaignConnectionItem.DataViewGuid); campaignConnectionRow.ActiveRequests = activeOpportunityRequests.GetValueOrNull(campaignConnectionItem.OpportunityGuid) ?? 0; campaignConnectionRow.PendingConnections = entitySetItemQry.Where(a => a.EntitySetId == campaignConnectionItem.EntitySetId).Count(); campaignConnectionRow.IsActive = campaignConnectionItem.IsActive; campaignConnectionRows.Add(campaignConnectionRow); } var qry = campaignConnectionRows.AsQueryable(); SortProperty sortProperty = gCampaigns.SortProperty; if (sortProperty != null) { qry = qry.Sort(sortProperty); } else { qry = qry.OrderBy(g => g.Name); } gCampaigns.DataSource = qry.ToList(); gCampaigns.DataBind(); }