/// <summary>
        /// Binds the grid.
        /// </summary>
        private void BindGrid()
        {
            RockContext rockContext = new RockContext();
            var         service     = new GroupMemberScheduleTemplateService(rockContext);

            var qry = service.Queryable().OrderBy(a => a.Name);

            gList.SetLinqDataSource(qry);
            gList.DataBind();
        }
        /// <summary>
        /// Gets the preference page content and view model.
        /// </summary>
        /// <param name="groupGuid"></param>
        /// <returns>A <see cref="PreferencePageContentBag"/> to be used when the preference page is displayed.</returns>
        private PreferencePageContentBag GetPreferenceTemplateContent(Guid groupGuid)
        {
            var rockContext = new RockContext();

            var groupService = new GroupService(rockContext);

            // Get the group from the corresponding Guid.
            var group = groupService.Get(groupGuid);

            // Get the corresponding group member record.
            var groupMember = GetGroupMemberRecord(rockContext, group.Id, CurrentPersonId);

            // Get the reminder days offset.
            var selectedOffset = groupMember.ScheduleReminderEmailOffsetDays == null ? 0 : groupMember.ScheduleReminderEmailOffsetDays.Value;

            // Templates for all and this group type.
            var groupMemberScheduleTemplateService = new GroupMemberScheduleTemplateService(rockContext);
            var groupMemberScheduleTemplates       = groupMemberScheduleTemplateService
                                                     .Queryable()
                                                     .AsNoTracking()
                                                     .Where(x => x.GroupTypeId == null || x.GroupTypeId == group.GroupTypeId)
                                                     .Select(x => new
            {
                Value = ( Guid? )x.Guid,
                Text  = x.Name
            })
                                                     .ToList();

            var scheduleListItems = new List <ListItemViewModel>();

            foreach (var scheduleKey in groupMemberScheduleTemplates)
            {
                scheduleListItems.Add(new ListItemViewModel
                {
                    Value = scheduleKey.Value.ToStringSafe(),
                    Text  = scheduleKey.Text
                });
            }

            var selectedScheduleTemplate = groupMember.ScheduleTemplate != null ? groupMember.ScheduleTemplate.Guid : Guid.Empty;

            // The dictionary of merge fields.
            var mergeFields = RequestContext.GetCommonMergeFields();

            mergeFields.AddOrReplace("Group", group);

            var assignmentScheduleList = GetAssignmentScheduleList(group.Id);

            DateTimeOffset?selectedStartDate = null;

            if (groupMember.ScheduleStartDate != null)
            {
                selectedStartDate = groupMember.ScheduleStartDate.Value.ToRockDateTimeOffset();
            }

            // Return all of the necessary information to display on the preference page.
            return(new PreferencePageContentBag
            {
                SelectedOffset = selectedOffset,
                ListItems = scheduleListItems,
                SelectedSchedule = selectedScheduleTemplate,
                SelectedStartDate = selectedStartDate,
                AssignmentScheduleAndLocations = assignmentScheduleList
            });
        }