/// <summary> /// Binds the countries. /// </summary> private void BindCountries() { string currentValue = _ddlCountry.SelectedValue; _ddlCountry.Items.Clear(); _ddlCountry.SelectedIndex = -1; _ddlCountry.SelectedValue = null; _ddlCountry.ClearSelection(); var definedType = DefinedTypeCache.Get(new Guid(SystemGuid.DefinedType.LOCATION_COUNTRIES)); var countryValues = DefinedTypeCache.Get(Rock.SystemGuid.DefinedType.LOCATION_COUNTRIES.AsGuid()) .DefinedValues .OrderBy(v => v.Order) .ThenBy(v => v.Value) .ToList(); // Move default country to the top of the list string defaultCountryCode = GetDefaultCountry(); if (!string.IsNullOrWhiteSpace(defaultCountryCode)) { var defaultCountry = countryValues .Where(v => v.Value.Equals(defaultCountryCode, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (defaultCountry != null) { _ddlCountry.Items.Add(new ListItem("Countries", string.Empty)); _ddlCountry.Items.Add(new ListItem(UseCountryAbbreviation ? defaultCountry.Value : defaultCountry.Description, defaultCountry.Value)); _ddlCountry.Items.Add(new ListItem("------------------------", "------------------------")); } } foreach (var country in countryValues) { _ddlCountry.Items.Add(new ListItem(UseCountryAbbreviation ? country.Value : country.Description, country.Value)); } bool?showCountry = GlobalAttributesCache.Get().GetValue("SupportInternationalAddresses").AsBooleanOrNull(); _ddlCountry.Visible = showCountry.HasValue && showCountry.Value; if (!string.IsNullOrWhiteSpace(currentValue)) { _ddlCountry.SetValue(currentValue); } else { _ddlCountry.SetValue(string.Empty); } }
/// <summary> /// Sets the form. /// </summary> /// <param name="value">The value.</param> /// <param name="workflowTypeAttributes">The workflow type attributes.</param> public void SetForm(WorkflowActionForm value, Dictionary <Guid, Rock.Model.Attribute> workflowTypeAttributes) { EnsureChildControls(); if (value != null) { _hfFormGuid.Value = value.Guid.ToString(); _ddlNotificationSystemEmail.SetValue(value.NotificationSystemEmailId); _cbIncludeActions.Checked = value.IncludeActionsInNotification; _ceHeaderText.Text = value.Header; _ceFooterText.Text = value.Footer; _falActions.Value = value.Actions; _cbAllowNotes.Checked = value.AllowNotes.HasValue && value.AllowNotes.Value; // Remove any existing rows (shouldn't be any) foreach (var attributeRow in Controls.OfType <WorkflowFormAttributeRow>()) { Controls.Remove(attributeRow); } foreach (var formAttribute in value.FormAttributes.OrderBy(a => a.Order)) { var row = new WorkflowFormAttributeRow(); row.AttributeGuid = formAttribute.Attribute.Guid; row.AttributeName = formAttribute.Attribute.Name; row.Guid = formAttribute.Guid; row.IsVisible = formAttribute.IsVisible; row.IsEditable = !formAttribute.IsReadOnly; row.IsRequired = formAttribute.IsRequired; row.HideLabel = formAttribute.HideLabel; row.PreHtml = formAttribute.PreHtml; row.PostHtml = formAttribute.PostHtml; Controls.Add(row); } _ddlActionAttribute.Items.Clear(); _ddlActionAttribute.Items.Add(new ListItem()); foreach (var attributeItem in workflowTypeAttributes) { var fieldType = FieldTypeCache.Get(attributeItem.Value.FieldTypeId); if (fieldType != null && fieldType.Field is Rock.Field.Types.TextFieldType) { var li = new ListItem(attributeItem.Value.Name, attributeItem.Key.ToString()); li.Selected = value.ActionAttributeGuid.HasValue && value.ActionAttributeGuid.Value.ToString() == li.Value; _ddlActionAttribute.Items.Add(li); } } } else { _hfFormGuid.Value = string.Empty; _ddlNotificationSystemEmail.SelectedIndex = 0; _cbIncludeActions.Checked = true; _ceHeaderText.Text = string.Empty; _ceFooterText.Text = string.Empty; _falActions.Value = "Submit^^^Your information has been submitted successfully."; _ddlNotificationSystemEmail.SelectedIndex = 0; _cbAllowNotes.Checked = false; } }
/// <summary> /// Sets the type of the group. /// </summary> /// <param name="groupTypeId">The group type identifier.</param> /// <param name="groupTypeGuid">The group type unique identifier.</param> /// <param name="groupTypeName">Name of the group type.</param> /// <param name="inheritedGroupTypeId">The inherited group type identifier.</param> public void SetGroupType(int groupTypeId, Guid groupTypeGuid, string groupTypeName, int?inheritedGroupTypeId) { EnsureChildControls(); _hfGroupTypeId.Value = groupTypeId.ToString(); _hfGroupTypeGuid.Value = groupTypeGuid.ToString(); _tbGroupTypeName.Text = groupTypeName; _ddlGroupTypeInheritFrom.SetValue(inheritedGroupTypeId); }
/// <summary> /// Sets the type of the group. /// </summary> /// <param name="value">The value.</param> public void SetGroupType(GroupType value) { EnsureChildControls(); _hfGroupTypeId.Value = value.Id.ToString(); _hfGroupTypeGuid.Value = value.Guid.ToString(); _tbGroupTypeName.Text = value.Name; _ddlGroupTypeInheritFrom.SetValue(value.InheritedGroupTypeId); }
/// <summary> /// Sets the type of the workflow action. /// </summary> /// <param name="value">The value.</param> /// <param name="workflowTypeAttributes">The workflow type attributes.</param> public void SetWorkflowActionType(WorkflowActionType value, Dictionary <Guid, Rock.Model.Attribute> workflowTypeAttributes) { EnsureChildControls(); _hfActionTypeGuid.Value = value.Guid.ToString(); _ddlCriteriaAttribute.Items.Clear(); _ddlCriteriaAttribute.Items.Add(new ListItem()); _tbddlCriteriaValue.DropDownList.Items.Clear(); _tbddlCriteriaValue.DropDownList.Items.Add(new ListItem()); foreach (var attribute in workflowTypeAttributes) { var li = new ListItem(attribute.Value.Name, attribute.Key.ToString()); li.Selected = value.CriteriaAttributeGuid.HasValue && value.CriteriaAttributeGuid.Value.ToString() == li.Value; _ddlCriteriaAttribute.Items.Add(li); _tbddlCriteriaValue.DropDownList.Items.Add(new ListItem(attribute.Value.Name, attribute.Key.ToString())); } _ddlCriteriaComparisonType.SetValue(value.CriteriaComparisonType.ConvertToInt()); _tbddlCriteriaValue.SelectedValue = value.CriteriaValue; _tbActionTypeName.Text = value.Name; _wfatpEntityType.SetValue(EntityTypeCache.Get(value.EntityTypeId)); _cbIsActivityCompletedOnSuccess.Checked = value.IsActivityCompletedOnSuccess; var entityType = EntityTypeCache.Get(value.EntityTypeId); if (entityType != null && entityType.Name == typeof(Rock.Workflow.Action.UserEntryForm).FullName) { if (value.WorkflowForm == null) { value.WorkflowForm = new WorkflowActionForm(); value.WorkflowForm.Actions = "Submit^^^Your information has been submitted successfully."; var systemEmail = new SystemEmailService(new RockContext()).Get(SystemGuid.SystemEmail.WORKFLOW_FORM_NOTIFICATION.AsGuid()); if (systemEmail != null) { value.WorkflowForm.NotificationSystemEmailId = systemEmail.Id; } } _formEditor.SetForm(value.WorkflowForm, workflowTypeAttributes); _cbIsActionCompletedOnSuccess.Checked = true; _cbIsActionCompletedOnSuccess.Enabled = false; } else { _formEditor.SetForm(null, workflowTypeAttributes); _cbIsActionCompletedOnSuccess.Checked = value.IsActionCompletedOnSuccess; _cbIsActionCompletedOnSuccess.Enabled = true; } _phActionAttributes.Controls.Clear(); Rock.Attribute.Helper.AddEditControls(value, _phActionAttributes, true, ValidationGroup, new List <string>() { "Active", "Order" }); }
/// <summary> /// Sets the type of the workflow action. /// </summary> /// <param name="value">The value.</param> /// <param name="workflowTypeAttributes">The workflow type attributes.</param> public void SetWorkflowActionType(WorkflowActionType value, Dictionary <Guid, Rock.Model.Attribute> workflowTypeAttributes) { EnsureChildControls(); _hfActionTypeGuid.Value = value.Guid.ToString(); _ddlCriteriaAttribute.Items.Clear(); _ddlCriteriaAttribute.Items.Add(new ListItem()); _tbddlCriteriaValue.DropDownList.Items.Clear(); _tbddlCriteriaValue.DropDownList.Items.Add(new ListItem()); foreach (var attribute in workflowTypeAttributes) { var li = new ListItem(attribute.Value.Name, attribute.Key.ToString()); li.Selected = value.CriteriaAttributeGuid.HasValue && value.CriteriaAttributeGuid.Value.ToString() == li.Value; _ddlCriteriaAttribute.Items.Add(li); _tbddlCriteriaValue.DropDownList.Items.Add(new ListItem(attribute.Value.Name, attribute.Key.ToString())); } _ddlCriteriaComparisonType.SetValue(value.CriteriaComparisonType.ConvertToInt()); _tbddlCriteriaValue.SelectedValue = value.CriteriaValue; _tbActionTypeName.Text = value.Name; _wfatpEntityType.SetValue(EntityTypeCache.Get(value.EntityTypeId)); _cbIsActivityCompletedOnSuccess.Checked = value.IsActivityCompletedOnSuccess; var entityType = EntityTypeCache.Get(value.EntityTypeId); if (entityType != null && entityType.Name == typeof(Rock.Workflow.Action.FormBuilder).FullName) { // Do nothing to the WorkflowForm property. } else if (entityType != null && entityType.Name == typeof(Rock.Workflow.Action.UserEntryForm).FullName) { if (value.WorkflowForm == null) { value.WorkflowForm = CreateNewWorkflowForm(); } _formEditor.SetForm(value.WorkflowForm, workflowTypeAttributes); _cbIsActionCompletedOnSuccess.Checked = true; _cbIsActionCompletedOnSuccess.Enabled = false; } else { _formEditor.SetForm(null, workflowTypeAttributes); _cbIsActionCompletedOnSuccess.Checked = value.IsActionCompletedOnSuccess; _cbIsActionCompletedOnSuccess.Enabled = true; } _phActionAttributes.Controls.Clear(); Rock.Attribute.Helper.AddEditControls(value, _phActionAttributes, true, ValidationGroup, new List <string>() { "Active", "Order" }); }
/// <summary> /// Sets the type of the group. /// </summary> /// <param name="groupType">Type of the group.</param> /// <param name="rockContext">The rock context.</param> public void SetGroupType(GroupType groupType, RockContext rockContext) { EnsureChildControls(); if (groupType != null) { GroupTypeGuid = groupType.Guid; _tbGroupTypeName.Text = groupType.Name; _ddlGroupTypeInheritFrom.SetValue(groupType.InheritedGroupTypeId); _ddlAttendanceRule.SetValue((int)groupType.AttendanceRule); _ddlPrintTo.SetValue((int)groupType.AttendancePrintTo); CreateGroupTypeAttributeControls(groupType, rockContext); } }
/// <summary> /// Binds the countries data source to the selection control and sets the current value. /// </summary> private void RebindCountries() { string currentValue = _ddlCountry.SelectedValue; _ddlCountry.Items.Clear(); _ddlCountry.SelectedIndex = -1; _ddlCountry.SelectedValue = null; _ddlCountry.ClearSelection(); BindCountries(); string defaultCountryCode = GetDefaultCountry(); _ddlCountry.SetValue(string.IsNullOrWhiteSpace(currentValue) ? defaultCountryCode : currentValue); }
/// <summary> /// Adds the grid columns. /// </summary> /// <param name="dataTable">The data table.</param> private void AddGridColumns( Grid grid, DataTable dataTable ) { bool showColumns = GetAttributeValue( "ShowColumns" ).AsBoolean(); var columnList = GetAttributeValue( "Columns" ).SplitDelimitedValues().ToList(); int rowsToEval = 10; if ( dataTable.Rows.Count < 10 ) { rowsToEval = dataTable.Rows.Count; } grid.Columns.Clear(); if ( !string.IsNullOrWhiteSpace( grid.PersonIdField ) ) { grid.Columns.Add( new SelectField() ); } GridFilterColumnLookup = new Dictionary<Control, string>(); foreach ( DataColumn dataTableColumn in dataTable.Columns ) { if ( columnList.Count > 0 && ( ( showColumns && !columnList.Contains( dataTableColumn.ColumnName, StringComparer.OrdinalIgnoreCase ) ) || ( !showColumns && columnList.Contains( dataTableColumn.ColumnName, StringComparer.OrdinalIgnoreCase ) ) ) ) { continue; } BoundField bf = new BoundField(); var splitCaseName = dataTableColumn.ColumnName.SplitCase(); if ( dataTableColumn.DataType == typeof( bool ) ) { bf = new BoolField(); if ( GridFilter != null ) { var id = "ddl" + dataTableColumn.ColumnName.RemoveSpecialCharacters(); var filterControl = new RockDropDownList() { Label = splitCaseName, ID = id }; GridFilterColumnLookup.Add( filterControl, dataTableColumn.ColumnName ); filterControl.Items.Add( BoolToString( null ) ); filterControl.Items.Add( BoolToString( true ) ); filterControl.Items.Add( BoolToString( false ) ); GridFilter.Controls.Add( filterControl ); var value = GridFilter.GetUserPreference( id ); if ( value != null ) { filterControl.SetValue( value ); } } } else if ( dataTableColumn.DataType == typeof( DateTime ) ) { bf = new DateField(); for ( int i = 0; i < rowsToEval; i++ ) { object dateObj = dataTable.Rows[i][dataTableColumn]; if ( dateObj is DateTime ) { DateTime dateTime = ( DateTime ) dateObj; if ( dateTime.TimeOfDay.Seconds != 0 ) { bf = new DateTimeField(); break; } } } if ( GridFilter != null ) { var id = "drp" + dataTableColumn.ColumnName.RemoveSpecialCharacters(); var filterControl = new DateRangePicker() { Label = splitCaseName, ID = id, }; GridFilterColumnLookup.Add( filterControl, dataTableColumn.ColumnName ); GridFilter.Controls.Add( filterControl ); var value = GridFilter.GetUserPreference( id ); if ( value != null ) { DateTime upper; DateTime lower; if ( DateRangePicker.TryParse( value, out lower, out upper ) ) { filterControl.LowerValue = lower; filterControl.UpperValue = upper; } } } } else { bf.HtmlEncode = false; if ( GridFilter != null ) { var id = "tb" + dataTableColumn.ColumnName.RemoveSpecialCharacters(); var filterControl = new RockTextBox() { Label = splitCaseName, ID = id }; GridFilterColumnLookup.Add( filterControl, dataTableColumn.ColumnName ); GridFilter.Controls.Add( filterControl ); var key = filterControl.ID; var value = GridFilter.GetUserPreference( key ); if ( value != null ) { filterControl.Text = value; } } } bf.DataField = dataTableColumn.ColumnName; bf.SortExpression = dataTableColumn.ColumnName; bf.HeaderText = splitCaseName; grid.Columns.Add( bf ); } }
/// <summary> /// Adds the filter controls and grid columns for all of the registration template's form fields /// that were configured to 'Show on Grid' /// </summary> private void AddDynamicRegistrantControls() { phRegistrantFormFieldFilters.Controls.Clear(); // Remove any of the dynamic person fields var dynamicColumns = new List<string> { "PersonAlias.Person.BirthDate", }; foreach ( var column in gRegistrants.Columns .OfType<BoundField>() .Where( c => dynamicColumns.Contains( c.DataField ) ) .ToList() ) { gRegistrants.Columns.Remove( column ); } // Remove any of the dynamic attribute fields foreach ( var column in gRegistrants.Columns .OfType<AttributeField>() .ToList() ) { gRegistrants.Columns.Remove( column ); } // Remove the fees field foreach ( var column in gRegistrants.Columns .OfType<TemplateField>() .Where( c => c.HeaderText == "Fees" ) .ToList() ) { gRegistrants.Columns.Remove( column ); } // Remove the delete field foreach ( var column in gRegistrants.Columns .OfType<DeleteField>() .ToList() ) { gRegistrants.Columns.Remove( column ); } if ( RegistrantFields != null ) { foreach ( var field in RegistrantFields ) { if ( field.FieldSource == RegistrationFieldSource.PersonField && field.PersonFieldType.HasValue ) { switch ( field.PersonFieldType.Value ) { case RegistrationPersonFieldType.Campus: { var ddlCampus = new RockDropDownList(); ddlCampus.ID = "ddlCampus"; ddlCampus.Label = "Home Campus"; ddlCampus.DataValueField = "Id"; ddlCampus.DataTextField = "Name"; ddlCampus.DataSource = CampusCache.All(); ddlCampus.DataBind(); ddlCampus.Items.Insert( 0, new ListItem( "", "" ) ); ddlCampus.SetValue( fRegistrants.GetUserPreference( "Home Campus" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlCampus ); var templateField = new TemplateField(); templateField.ItemTemplate = new LiteralFieldTemplate( "lCampus" ); templateField.HeaderText = "Campus"; gRegistrants.Columns.Add( templateField ); break; } case RegistrationPersonFieldType.Email: { var tbEmailFilter = new RockTextBox(); tbEmailFilter.ID = "tbEmailFilter"; tbEmailFilter.Label = "Email"; tbEmailFilter.Text = fRegistrants.GetUserPreference( "Email" ); phRegistrantFormFieldFilters.Controls.Add( tbEmailFilter ); string dataFieldExpression = "PersonAlias.Person.Email"; var emailField = new BoundField(); emailField.DataField = dataFieldExpression; emailField.HeaderText = "Email"; emailField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( emailField ); break; } case RegistrationPersonFieldType.Birthdate: { var drpBirthdateFilter = new DateRangePicker(); drpBirthdateFilter.ID = "drpBirthdateFilter"; drpBirthdateFilter.Label = "Birthdate Range"; drpBirthdateFilter.DelimitedValues = fRegistrants.GetUserPreference( "Birthdate Range" ); phRegistrantFormFieldFilters.Controls.Add( drpBirthdateFilter ); string dataFieldExpression = "PersonAlias.Person.BirthDate"; var birthdateField = new DateField(); birthdateField.DataField = dataFieldExpression; birthdateField.HeaderText = "Birthdate"; birthdateField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( birthdateField ); break; } case RegistrationPersonFieldType.Gender: { var ddlGenderFilter = new RockDropDownList(); ddlGenderFilter.BindToEnum<Gender>( true ); ddlGenderFilter.ID = "ddlGenderFilter"; ddlGenderFilter.Label = "Gender"; ddlGenderFilter.SetValue( fRegistrants.GetUserPreference( "Gender" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlGenderFilter ); string dataFieldExpression = "PersonAlias.Person.Gender"; var genderField = new EnumField(); genderField.DataField = dataFieldExpression; genderField.HeaderText = "Gender"; genderField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( genderField ); break; } case RegistrationPersonFieldType.MaritalStatus: { var ddlMaritalStatusFilter = new RockDropDownList(); ddlMaritalStatusFilter.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); ddlMaritalStatusFilter.ID = "ddlMaritalStatusFilter"; ddlMaritalStatusFilter.Label = "Marital Status"; ddlMaritalStatusFilter.SetValue( fRegistrants.GetUserPreference( "Marital Status" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlMaritalStatusFilter ); string dataFieldExpression = "PersonAlias.Person.MaritalStatusValue.Value"; var maritalStatusField = new BoundField(); maritalStatusField.DataField = dataFieldExpression; maritalStatusField.HeaderText = "MaritalStatus"; maritalStatusField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( maritalStatusField ); break; } case RegistrationPersonFieldType.MobilePhone: { var tbPhoneFilter = new RockTextBox(); tbPhoneFilter.ID = "tbPhoneFilter"; tbPhoneFilter.Label = "Phone"; tbPhoneFilter.Text = fRegistrants.GetUserPreference( "Phone" ); phRegistrantFormFieldFilters.Controls.Add( tbPhoneFilter ); var templateField = new TemplateField(); templateField.ItemTemplate = new LiteralFieldTemplate( "lPhone" ); templateField.HeaderText = "Phone(s)"; gRegistrants.Columns.Add( templateField ); break; } } } else if ( field.Attribute != null ) { var attribute = field.Attribute; var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phRegistrantFormFieldFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phRegistrantFormFieldFilters.Controls.Add( wrapper ); } string savedValue = fRegistrants.GetUserPreference( attribute.Key ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { } } } string dataFieldExpression = attribute.Id.ToString() + attribute.Key; bool columnExists = gRegistrants.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gRegistrants.Columns.Add( boundField ); } } } } // Add fee column var feeField = new TemplateField(); feeField.HeaderText = "Fees"; feeField.ItemTemplate = new LiteralFieldTemplate( "lFees" ); gRegistrants.Columns.Add( feeField ); var deleteField = new DeleteField(); gRegistrants.Columns.Add( deleteField ); deleteField.Click += gRegistrants_Delete; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { gp = new GroupPicker(); gp.ID = filterControl.ID + "_gp"; gp.Label = "Group(s)"; gp.SelectItem += gp_SelectItem; gp.CssClass = "js-group-picker"; gp.AllowMultiSelect = true; filterControl.Controls.Add( gp ); cbChildGroups = new RockCheckBox(); cbChildGroups.ID = filterControl.ID + "_cbChildsGroups"; cbChildGroups.Text = "Include Child Group(s)"; cbChildGroups.CssClass = "js-include-child-groups"; cbChildGroups.AutoPostBack = true; cbChildGroups.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbChildGroups ); cbIncludeSelectedGroup = new RockCheckBox(); cbIncludeSelectedGroup.ID = filterControl.ID + "_cbIncludeSelectedGroup"; cbIncludeSelectedGroup.Text = "Include Selected Group(s)"; cbIncludeSelectedGroup.CssClass = "js-include-selected-groups"; cbIncludeSelectedGroup.AutoPostBack = true; cbIncludeSelectedGroup.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbIncludeSelectedGroup ); cbChildGroupsPlusDescendants = new RockCheckBox(); cbChildGroupsPlusDescendants.ID = filterControl.ID + "_cbChildGroupsPlusDescendants"; cbChildGroupsPlusDescendants.Text = "Include All Descendants(s)"; cbChildGroupsPlusDescendants.CssClass = "js-include-child-groups-descendants"; cbChildGroupsPlusDescendants.AutoPostBack = true; cbChildGroupsPlusDescendants.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbChildGroupsPlusDescendants ); cblRole = new RockCheckBoxList(); cblRole.Label = "with Group Member Role(s) (optional)"; cblRole.ID = filterControl.ID + "_cblRole"; cblRole.CssClass = "js-roles"; cblRole.Visible = false; filterControl.Controls.Add( cblRole ); RockDropDownList ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = filterControl.ID + "_ddlGroupMemberStatus"; ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Select a specific group member status to only include group members with that status. Leaving this blank will return all members."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); filterControl.Controls.Add( ddlGroupMemberStatus ); return new Control[6] { gp, cbChildGroups, cbIncludeSelectedGroup, cbChildGroupsPlusDescendants, cblRole, ddlGroupMemberStatus }; }
/// <summary> /// Creates the model representation of the child controls used to display and edit the filter settings. /// Implement this version of CreateChildControls if your DataFilterComponent works the same in all filter modes /// </summary> /// <param name="entityType">The System Type of the entity to which the filter will be applied.</param> /// <param name="filterControl">The control that serves as the container for the filter controls.</param> /// <returns> /// The array of new controls created to implement the filter. /// </returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { // Define Control: Group Data View Picker var ddlDataView = new DataViewPicker(); ddlDataView.ID = filterControl.GetChildControlInstanceName( _CtlDataView ); ddlDataView.Label = "Is Member of Group from Data View"; ddlDataView.Help = "A Data View that filters the Groups included in the result. If no value is selected, any Groups that would be visible in a Group List will be included."; filterControl.Controls.Add( ddlDataView ); // Define Control: Group Member Status DropDown List var ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = filterControl.GetChildControlInstanceName( _CtlGroupStatus ); ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Specifies the Status the Member must have to be included in the result. If no value is selected, Members of every Group Status will be shown."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); filterControl.Controls.Add( ddlGroupMemberStatus ); // Define Control: Role Type DropDown List var ddlRoleType = new RockDropDownList(); ddlRoleType.ID = filterControl.GetChildControlInstanceName( _CtlRoleType ); ddlRoleType.Label = "with Group Role Type"; ddlRoleType.Help = "Specifies the type of Group Role the Member must have to be included in the result. If no value is selected, Members in every Role will be shown."; ddlRoleType.Items.Add( new ListItem( string.Empty, RoleTypeSpecifier.Any.ToString() ) ); ddlRoleType.Items.Add( new ListItem( "Leader", RoleTypeSpecifier.Leader.ToString() ) ); ddlRoleType.Items.Add( new ListItem( "Member", RoleTypeSpecifier.Member.ToString() ) ); filterControl.Controls.Add( ddlRoleType ); // Populate the Data View Picker int entityTypeId = EntityTypeCache.Read( typeof( Model.Group ) ).Id; ddlDataView.EntityTypeId = entityTypeId; return new Control[] { ddlDataView, ddlGroupMemberStatus, ddlRoleType }; }
/// <summary> /// Sets the workflow activity. /// </summary> /// <param name="activity">The value.</param> /// <param name="rockContext">The rock context.</param> /// <param name="setValues">if set to <c>true</c> [set values].</param> public void SetWorkflowActivity(WorkflowActivity activity, RockContext rockContext, bool setValues = false) { EnsureChildControls(); _hfActivityGuid.Value = activity.Guid.ToString(); _lblActivityTypeName.Text = activity.ActivityTypeCache.Name; _lblActivityTypeDescription.Text = activity.ActivityTypeCache.Description; if (activity.CompletedDateTime.HasValue) { _lblStatus.Visible = true; _lblStatus.Text = "<span class='label label-default'>Completed</span>"; } else if (activity.ActivatedDateTime.HasValue) { _lblStatus.Visible = true; _lblStatus.Text = "<span class='label label-success'>Active</span>"; } else { _lblStatus.Visible = false; _lblStatus.Text = string.Empty; } _cbActivityIsComplete.Checked = activity.CompletedDateTime.HasValue; if (activity.AssignedPersonAliasId.HasValue) { var person = new PersonAliasService(rockContext).Queryable() .Where(a => a.Id == activity.AssignedPersonAliasId.Value) .Select(a => a.Person) .FirstOrDefault(); if (person != null) { _ppAssignedToPerson.SetValue(person); _lAssignedToPerson.Text = person.FullName; } } if (activity.AssignedGroupId.HasValue) { var group = new GroupService(rockContext).Get(activity.AssignedGroupId.Value); if (group != null) { if (group.IsSecurityRole) { _ddlAssignedToRole.SetValue(group.Id); _gpAssignedToGroup.SetValue(null); _lAssignedToRole.Text = group.Name; } else { _ddlAssignedToRole.SelectedIndex = -1; _gpAssignedToGroup.SetValue(group); _lAssignedToGroup.Text = group.Name; } } } var sbState = new StringBuilder(); if (activity.ActivatedDateTime.HasValue) { sbState.AppendFormat("<strong>Activated:</strong> {0} {1} ({2})<br/>", activity.ActivatedDateTime.Value.ToShortDateString(), activity.ActivatedDateTime.Value.ToShortTimeString(), activity.ActivatedDateTime.Value.ToRelativeDateString()); } if (activity.CompletedDateTime.HasValue) { sbState.AppendFormat("<strong>Completed:</strong> {0} {1} ({2})", activity.CompletedDateTime.Value.ToShortDateString(), activity.CompletedDateTime.Value.ToShortTimeString(), activity.CompletedDateTime.Value.ToRelativeDateString()); } _lState.Text = sbState.ToString(); _phAttributes.Controls.Clear(); if (CanEdit) { Rock.Attribute.Helper.AddEditControls(activity, _phAttributes, setValues, ValidationGroup); } else { Rock.Attribute.Helper.AddDisplayControls(activity, _phAttributes); } }
/// <summary> /// Creates the child controls. /// </summary> /// <param name="parentControl"></param> /// <returns></returns> public override Control[] CreateChildControls( Control parentControl ) { // Define Control: Output Format DropDown List var ddlFormat = new RockDropDownList(); ddlFormat.ID = parentControl.GetChildControlInstanceName( _CtlFormat ); ddlFormat.Label = "Output Format"; ddlFormat.Help = "Specifies the content and format of the values in this field."; ddlFormat.Items.Add( new ListItem( "Group List: Name And Role", ListFormatSpecifier.GroupAndRole.ToString() ) ); ddlFormat.Items.Add( new ListItem( "Group List: Group Name", ListFormatSpecifier.GroupOnly.ToString() ) ); ddlFormat.Items.Add( new ListItem( "Yes/No: Yes if any participation", ListFormatSpecifier.YesNo.ToString() ) ); parentControl.Controls.Add( ddlFormat ); // Define Control: Group Data View Picker var ddlDataView = new DataViewPicker(); ddlDataView.ID = parentControl.GetChildControlInstanceName( _CtlDataView ); ddlDataView.Label = "Participates in Groups"; ddlDataView.Help = "A Data View that filters the Groups included in the result. If no value is selected, any Groups that would be visible in a Group List will be included."; parentControl.Controls.Add( ddlDataView ); // Define Control: Role Type DropDown List var ddlRoleType = new RockDropDownList(); ddlRoleType.ID = parentControl.GetChildControlInstanceName( _CtlRoleType ); ddlRoleType.Label = "with Group Role Type"; ddlRoleType.Help = "Specifies the type of Group Role the Member must have to be included in the result. If no value is selected, Members in any Role will be included."; ddlRoleType.Items.Add( new ListItem( string.Empty, RoleTypeSpecifier.Any.ToString() ) ); ddlRoleType.Items.Add( new ListItem( "Leader", RoleTypeSpecifier.Leader.ToString() ) ); ddlRoleType.Items.Add( new ListItem( "Member", RoleTypeSpecifier.Member.ToString() ) ); parentControl.Controls.Add( ddlRoleType ); // Define Control: Group Member Status DropDown List var ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = parentControl.GetChildControlInstanceName( _CtlGroupStatus ); ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Specifies the Status the Member must have to be included in the result. If no value is selected, Members of any Group Status will be shown."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); parentControl.Controls.Add( ddlGroupMemberStatus ); // Populate the Data View Picker int entityTypeId = EntityTypeCache.Read( typeof( Model.Group ) ).Id; ddlDataView.EntityTypeId = entityTypeId; return new Control[] { ddlDataView, ddlRoleType, ddlFormat, ddlGroupMemberStatus }; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { gp = new GroupPicker(); gp.ID = filterControl.ID + "_gp"; gp.Label = "Group(s)"; gp.SelectItem += gp_SelectItem; gp.CssClass = "js-group-picker"; gp.AllowMultiSelect = true; filterControl.Controls.Add( gp ); cbChildGroups = new RockCheckBox(); cbChildGroups.ID = filterControl.ID + "_cbChildsGroups"; cbChildGroups.Text = "Include Child Group(s)"; cbChildGroups.CssClass = "js-include-child-groups"; cbChildGroups.AutoPostBack = true; cbChildGroups.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbChildGroups ); cbIncludeSelectedGroup = new RockCheckBox(); cbIncludeSelectedGroup.ID = filterControl.ID + "_cbIncludeSelectedGroup"; cbIncludeSelectedGroup.Text = "Include Selected Group(s)"; cbIncludeSelectedGroup.CssClass = "js-include-selected-groups"; cbIncludeSelectedGroup.AutoPostBack = true; cbIncludeSelectedGroup.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbIncludeSelectedGroup ); cbChildGroupsPlusDescendants = new RockCheckBox(); cbChildGroupsPlusDescendants.ID = filterControl.ID + "_cbChildGroupsPlusDescendants"; cbChildGroupsPlusDescendants.Text = "Include All Descendants(s)"; cbChildGroupsPlusDescendants.CssClass = "js-include-child-groups-descendants"; cbChildGroupsPlusDescendants.AutoPostBack = true; cbChildGroupsPlusDescendants.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbChildGroupsPlusDescendants ); cbIncludeInactiveGroups = new RockCheckBox(); cbIncludeInactiveGroups.ID = filterControl.ID + "_cbIncludeInactiveGroups"; cbIncludeInactiveGroups.Text = "Include Inactive Groups"; cbIncludeInactiveGroups.CssClass = "js-include-inactive-groups"; cbIncludeInactiveGroups.AutoPostBack = true; cbIncludeInactiveGroups.CheckedChanged += gp_SelectItem; filterControl.Controls.Add( cbIncludeInactiveGroups ); cblRole = new RockCheckBoxList(); cblRole.Label = "with Group Member Role(s) (optional)"; cblRole.ID = filterControl.ID + "_cblRole"; cblRole.CssClass = "js-roles"; cblRole.Visible = false; filterControl.Controls.Add( cblRole ); RockDropDownList ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = filterControl.ID + "_ddlGroupMemberStatus"; ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Select a specific group member status to only include group members with that status. Leaving this blank will return all members."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); filterControl.Controls.Add( ddlGroupMemberStatus ); PanelWidget pwAdvanced = new PanelWidget(); filterControl.Controls.Add( pwAdvanced ); pwAdvanced.ID = filterControl.ID + "_pwAttributes"; pwAdvanced.Title = "Advanced Filters"; pwAdvanced.CssClass = "advanced-panel"; SlidingDateRangePicker addedOnDateRangePicker = new SlidingDateRangePicker(); addedOnDateRangePicker.ID = pwAdvanced.ID + "_addedOnDateRangePicker"; addedOnDateRangePicker.AddCssClass( "js-sliding-date-range" ); addedOnDateRangePicker.Label = "Date Added:"; addedOnDateRangePicker.Help = "Select the date range that the person was added to the group. Leaving this blank will not restrict results to a date range."; pwAdvanced.Controls.Add( addedOnDateRangePicker ); return new Control[9] { gp, cbChildGroups, cbIncludeSelectedGroup, cbChildGroupsPlusDescendants, cblRole, ddlGroupMemberStatus, cbIncludeInactiveGroups, addedOnDateRangePicker, pwAdvanced }; }
/// <summary> /// Creates the child controls. /// </summary> /// <param name="parentControl"></param> /// <returns></returns> public override System.Web.UI.Control[] CreateChildControls( System.Web.UI.Control parentControl ) { RockRadioButtonList rblShowAsLinkType = new RockRadioButtonList(); rblShowAsLinkType.ID = parentControl.ID + "_rblShowAsLinkType"; rblShowAsLinkType.Items.Add( new ListItem( "Show Name Only", ShowAsLinkType.NameOnly.ConvertToInt().ToString() ) ); rblShowAsLinkType.Items.Add( new ListItem( "Show as Person Link", ShowAsLinkType.PersonLink.ConvertToInt().ToString() ) ); rblShowAsLinkType.Items.Add( new ListItem( "Show as Group Member Link", ShowAsLinkType.GroupMemberLink.ConvertToInt().ToString() ) ); parentControl.Controls.Add( rblShowAsLinkType ); int? selectedGroupTypeId = null; if ( groupTypePicker != null ) { selectedGroupTypeId = groupTypePicker.SelectedGroupTypeId; } groupTypePicker = new GroupTypePicker(); groupTypePicker.ID = parentControl.ID + "_groupTypePicker"; groupTypePicker.Label = "Group Type"; groupTypePicker.GroupTypes = new GroupTypeService( new RockContext() ).Queryable().OrderBy( a => a.Order ).ThenBy( a => a.Name ).ToList(); groupTypePicker.SelectedIndexChanged += groupTypePicker_SelectedIndexChanged; groupTypePicker.AutoPostBack = true; groupTypePicker.SelectedGroupTypeId = selectedGroupTypeId; parentControl.Controls.Add( groupTypePicker ); cblRole = new RockCheckBoxList(); cblRole.Label = "with Group Role(s)"; cblRole.ID = parentControl.ID + "_cblRole"; parentControl.Controls.Add( cblRole ); PopulateGroupRolesCheckList( groupTypePicker.SelectedGroupTypeId ?? 0 ); RockDropDownList ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = parentControl.ID + "_ddlGroupMemberStatus"; ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Select a specific group member status to only include group members with that status. Leaving this blank will return all members."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); parentControl.Controls.Add( ddlGroupMemberStatus ); return new System.Web.UI.Control[] { rblShowAsLinkType, groupTypePicker, cblRole, ddlGroupMemberStatus }; }
/// <summary> /// Creates the fee field. /// </summary> /// <param name="fee">The fee.</param> /// <param name="setValues">if set to <c>true</c> [set values].</param> /// <param name="feeValues">The fee values.</param> private void CreateFeeField( RegistrationTemplateFee fee, bool setValues, List<FeeInfo> feeValues ) { if ( fee.FeeType == RegistrationFeeType.Single ) { string label = fee.Name; var cost = fee.CostValue.AsDecimalOrNull(); if ( cost.HasValue && cost.Value != 0.0M ) { label = string.Format( "{0} ({1})", fee.Name, cost.Value.ToString("C2")); } if ( fee.AllowMultiple ) { // Single Option, Multi Quantity var numUpDown = new NumberUpDown(); numUpDown.ID = "fee_" + fee.Id.ToString(); numUpDown.Label = label; numUpDown.Minimum = 0; phFees.Controls.Add( numUpDown ); if ( setValues && feeValues != null && feeValues.Any() ) { numUpDown.Value = feeValues.First().Quantity; } } else { // Single Option, Single Quantity var cb = new RockCheckBox(); cb.ID = "fee_" + fee.Id.ToString(); cb.Label = label; cb.SelectedIconCssClass = "fa fa-check-square-o fa-lg"; cb.UnSelectedIconCssClass = "fa fa-square-o fa-lg"; phFees.Controls.Add( cb ); if ( setValues && feeValues != null && feeValues.Any() ) { cb.Checked = feeValues.First().Quantity > 0; } } } else { // Parse the options to get name and cost for each var options = new Dictionary<string, string>(); string[] nameValues = fee.CostValue.Split( new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries ); foreach ( string nameValue in nameValues ) { string[] nameAndValue = nameValue.Split( new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries ); if ( nameAndValue.Length == 1) { options.AddOrIgnore( nameAndValue[0], nameAndValue[0] ); } if ( nameAndValue.Length == 2 ) { options.AddOrIgnore( nameAndValue[0], string.Format( "{0} ({1:C2})", nameAndValue[0], nameAndValue[1].AsDecimal() ) ); } } if ( fee.AllowMultiple ) { HtmlGenericControl feeAllowMultiple = new HtmlGenericControl( "div" ); phFees.Controls.Add( feeAllowMultiple ); feeAllowMultiple.AddCssClass( "feetype-allowmultiples" ); Label titleLabel = new Label(); feeAllowMultiple.Controls.Add( titleLabel ); titleLabel.CssClass = "control-label"; titleLabel.Text = fee.Name; foreach( var optionKeyVal in options ) { var numUpDown = new NumberUpDown(); numUpDown.ID = string.Format( "fee_{0}_{1}", fee.Id, optionKeyVal.Key ); numUpDown.Label = string.Format( "{0}", optionKeyVal.Value ); numUpDown.Minimum = 0; numUpDown.CssClass = "fee-allowmultiple"; feeAllowMultiple.Controls.Add( numUpDown ); if ( setValues && feeValues != null && feeValues.Any() ) { numUpDown.Value = feeValues .Where( f => f.Option == optionKeyVal.Key ) .Select( f => f.Quantity ) .FirstOrDefault(); } } } else { // Multi Option, Single Quantity var ddl = new RockDropDownList(); ddl.ID = "fee_" + fee.Id.ToString(); ddl.AddCssClass( "input-width-md" ); ddl.Label = fee.Name; ddl.DataValueField = "Key"; ddl.DataTextField = "Value"; ddl.DataSource = options; ddl.DataBind(); ddl.Items.Insert( 0, ""); phFees.Controls.Add( ddl ); if ( setValues && feeValues != null && feeValues.Any() ) { ddl.SetValue( feeValues .Where( f => f.Quantity > 0 ) .Select( f => f.Option ) .FirstOrDefault() ); } } } }
/// <summary> /// Creates the child controls. /// </summary> /// <param name="parentControl"></param> /// <returns></returns> public override System.Web.UI.Control[] CreateChildControls( System.Web.UI.Control parentControl ) { var groupTypePicker = new GroupTypePicker(); groupTypePicker.ID = parentControl.ID + "_groupTypePicker"; groupTypePicker.Label = "Group Type"; groupTypePicker.GroupTypes = new GroupTypeService( new RockContext() ).Queryable().OrderBy( a => a.Order ).ThenBy( a => a.Name ).ToList(); groupTypePicker.SelectedIndexChanged += groupTypePicker_SelectedIndexChanged; groupTypePicker.AutoPostBack = true; parentControl.Controls.Add( groupTypePicker ); int? selectedGroupTypeId = parentControl.Page.Request.Params[groupTypePicker.UniqueID].AsIntegerOrNull(); groupTypePicker.SelectedGroupTypeId = selectedGroupTypeId; var cblRole = new RockCheckBoxList(); cblRole.Label = "with Group Role(s)"; cblRole.ID = parentControl.ID + "_cblRole"; parentControl.Controls.Add( cblRole ); PopulateGroupRolesCheckList( groupTypePicker.SelectedGroupTypeId ?? 0, cblRole ); RockDropDownList ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = parentControl.ID + "_ddlGroupMemberStatus"; ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Select a specific group member status only include to only show true for group members with that status. Leaving this blank will return true for all members."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); parentControl.Controls.Add( ddlGroupMemberStatus ); return new Control[3] { groupTypePicker, cblRole, ddlGroupMemberStatus }; }
/// <summary> /// Creates the person field. /// </summary> /// <param name="field">The field.</param> /// <param name="setValue">if set to <c>true</c> [set value].</param> /// <param name="fieldValue">The field value.</param> private void CreatePersonField( RegistrationTemplateFormField field, bool setValue, object fieldValue ) { switch ( field.PersonFieldType ) { case RegistrationPersonFieldType.FirstName: { var tbFirstName = new RockTextBox(); tbFirstName.ID = "tbFirstName"; tbFirstName.Label = "First Name"; tbFirstName.Required = field.IsRequired; tbFirstName.ValidationGroup = BlockValidationGroup; tbFirstName.AddCssClass( "js-first-name" ); phRegistrantControls.Controls.Add( tbFirstName ); if ( setValue && fieldValue != null ) { tbFirstName.Text = fieldValue.ToString(); } break; } case RegistrationPersonFieldType.LastName: { var tbLastName = new RockTextBox(); tbLastName.ID = "tbLastName"; tbLastName.Label = "Last Name"; tbLastName.Required = field.IsRequired; tbLastName.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( tbLastName ); if ( setValue && fieldValue != null ) { tbLastName.Text = fieldValue.ToString(); } break; } case RegistrationPersonFieldType.Campus: { var cpHomeCampus = new CampusPicker(); cpHomeCampus.ID = "cpHomeCampus"; cpHomeCampus.Label = "Campus"; cpHomeCampus.Required = field.IsRequired; cpHomeCampus.ValidationGroup = BlockValidationGroup; cpHomeCampus.Campuses = CampusCache.All(); phRegistrantControls.Controls.Add( cpHomeCampus ); if ( setValue && fieldValue != null ) { cpHomeCampus.SelectedCampusId = fieldValue.ToString().AsIntegerOrNull(); } break; } case RegistrationPersonFieldType.Address: { var acAddress = new AddressControl(); acAddress.ID = "acAddress"; acAddress.Label = "Address"; acAddress.UseStateAbbreviation = true; acAddress.UseCountryAbbreviation = false; acAddress.Required = field.IsRequired; acAddress.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( acAddress ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().FromJsonOrNull<Location>(); acAddress.SetValues( value ); } break; } case RegistrationPersonFieldType.Email: { var tbEmail = new EmailBox(); tbEmail.ID = "tbEmail"; tbEmail.Label = "Email"; tbEmail.Required = field.IsRequired; tbEmail.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( tbEmail ); if ( setValue && fieldValue != null ) { tbEmail.Text = fieldValue.ToString(); } break; } case RegistrationPersonFieldType.Birthdate: { var bpBirthday = new BirthdayPicker(); bpBirthday.ID = "bpBirthday"; bpBirthday.Label = "Birthday"; bpBirthday.Required = field.IsRequired; bpBirthday.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( bpBirthday ); if ( setValue && fieldValue != null ) { var value = fieldValue as DateTime?; bpBirthday.SelectedDate = value; } break; } case RegistrationPersonFieldType.Gender: { var ddlGender = new RockDropDownList(); ddlGender.ID = "ddlGender"; ddlGender.Label = "Gender"; ddlGender.Required = field.IsRequired; ddlGender.ValidationGroup = BlockValidationGroup; ddlGender.BindToEnum<Gender>( false ); // change the 'Unknow' value to be blank instead ddlGender.Items.FindByValue( "0" ).Text = string.Empty; phRegistrantControls.Controls.Add( ddlGender ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().ConvertToEnumOrNull<Gender>() ?? Gender.Unknown; ddlGender.SetValue( value.ConvertToInt() ); } break; } case RegistrationPersonFieldType.MaritalStatus: { var ddlMaritalStatus = new RockDropDownList(); ddlMaritalStatus.ID = "ddlMaritalStatus"; ddlMaritalStatus.Label = "Marital Status"; ddlMaritalStatus.Required = field.IsRequired; ddlMaritalStatus.ValidationGroup = BlockValidationGroup; ddlMaritalStatus.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); phRegistrantControls.Controls.Add( ddlMaritalStatus ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().AsInteger(); ddlMaritalStatus.SetValue( value ); } break; } case RegistrationPersonFieldType.MobilePhone: { var dv = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE ); if ( dv != null ) { var ppMobile = new PhoneNumberBox(); ppMobile.ID = "ppMobile"; ppMobile.Label = dv.Value; ppMobile.Required = field.IsRequired; ppMobile.ValidationGroup = BlockValidationGroup; ppMobile.CountryCode = PhoneNumber.DefaultCountryCode(); phRegistrantControls.Controls.Add( ppMobile ); if ( setValue && fieldValue != null ) { var value = fieldValue as PhoneNumber; if ( value != null ) { ppMobile.CountryCode = value.CountryCode; ppMobile.Number = value.ToString(); } } } break; } case RegistrationPersonFieldType.HomePhone: { var dv = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME ); if ( dv != null ) { var ppHome = new PhoneNumberBox(); ppHome.ID = "ppHome"; ppHome.Label = dv.Value; ppHome.Required = field.IsRequired; ppHome.ValidationGroup = BlockValidationGroup; ppHome.CountryCode = PhoneNumber.DefaultCountryCode(); phRegistrantControls.Controls.Add( ppHome ); if ( setValue && fieldValue != null ) { var value = fieldValue as PhoneNumber; if ( value != null ) { ppHome.CountryCode = value.CountryCode; ppHome.Number = value.ToString(); } } } break; } case RegistrationPersonFieldType.WorkPhone: { var dv = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_WORK ); if ( dv != null ) { var ppWork = new PhoneNumberBox(); ppWork.ID = "ppWork"; ppWork.Label = dv.Value; ppWork.Required = field.IsRequired; ppWork.ValidationGroup = BlockValidationGroup; ppWork.CountryCode = PhoneNumber.DefaultCountryCode(); phRegistrantControls.Controls.Add( ppWork ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().FromJsonOrNull<PhoneNumber>(); if ( value != null ) { ppWork.CountryCode = value.CountryCode; ppWork.Number = value.ToString(); } } } break; } } }
/// <summary> /// Adds the filter controls and grid columns for all of the registration template's form fields /// that were configured to 'Show on Grid' /// </summary> private void AddDynamicControls() { phRegistrantFormFieldFilters.Controls.Clear(); phWaitListFormFieldFilters.Controls.Clear(); ClearGrid( gGroupPlacements ); ClearGrid( gRegistrants ); ClearGrid( gWaitList ); if ( RegistrantFields != null ) { foreach ( var field in RegistrantFields ) { if ( field.FieldSource == RegistrationFieldSource.PersonField && field.PersonFieldType.HasValue ) { switch ( field.PersonFieldType.Value ) { case RegistrationPersonFieldType.Campus: { var ddlCampus = new RockDropDownList(); ddlCampus.ID = "ddlCampus"; ddlCampus.Label = "Home Campus"; ddlCampus.DataValueField = "Id"; ddlCampus.DataTextField = "Name"; ddlCampus.DataSource = CampusCache.All(); ddlCampus.DataBind(); ddlCampus.Items.Insert( 0, new ListItem( "", "" ) ); ddlCampus.SetValue( fRegistrants.GetUserPreference( "Home Campus" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlCampus ); var ddlCampus2 = new RockDropDownList(); ddlCampus2.ID = "ddlCampus"; ddlCampus2.Label = "Home Campus"; ddlCampus2.DataValueField = "Id"; ddlCampus2.DataTextField = "Name"; ddlCampus2.DataSource = CampusCache.All(); ddlCampus2.DataBind(); ddlCampus2.Items.Insert( 0, new ListItem( "", "" ) ); ddlCampus2.SetValue( fRegistrants.GetUserPreference( "WL-Home Campus" ) ); phWaitListFormFieldFilters.Controls.Add( ddlCampus2 ); var templateField = new RockLiteralField(); templateField.ID = "lCampus"; templateField.HeaderText = "Campus"; gRegistrants.Columns.Add( templateField ); var templateField2 = new RockLiteralField(); templateField2.ID = "lCampus"; templateField2.HeaderText = "Campus"; gGroupPlacements.Columns.Add( templateField2 ); var templateField3 = new RockLiteralField(); templateField3.ID = "lCampus"; templateField3.HeaderText = "Campus"; gWaitList.Columns.Add( templateField3 ); break; } case RegistrationPersonFieldType.Email: { var tbEmailFilter = new RockTextBox(); tbEmailFilter.ID = "tbEmailFilter"; tbEmailFilter.Label = "Email"; tbEmailFilter.Text = fRegistrants.GetUserPreference( "Email" ); phRegistrantFormFieldFilters.Controls.Add( tbEmailFilter ); var tbEmailFilter2 = new RockTextBox(); tbEmailFilter2.ID = "tbEmailFilter"; tbEmailFilter2.Label = "Email"; tbEmailFilter2.Text = fRegistrants.GetUserPreference( "WL-Email" ); phWaitListFormFieldFilters.Controls.Add( tbEmailFilter2 ); string dataFieldExpression = "PersonAlias.Person.Email"; var emailField = new RockBoundField(); emailField.DataField = dataFieldExpression; emailField.HeaderText = "Email"; emailField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( emailField ); var emailField2 = new RockBoundField(); emailField2.DataField = dataFieldExpression; emailField2.HeaderText = "Email"; emailField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( emailField2 ); var emailField3 = new RockBoundField(); emailField3.DataField = dataFieldExpression; emailField3.HeaderText = "Email"; emailField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( emailField3 ); break; } case RegistrationPersonFieldType.Birthdate: { var drpBirthdateFilter = new DateRangePicker(); drpBirthdateFilter.ID = "drpBirthdateFilter"; drpBirthdateFilter.Label = "Birthdate Range"; drpBirthdateFilter.DelimitedValues = fRegistrants.GetUserPreference( "Birthdate Range" ); phRegistrantFormFieldFilters.Controls.Add( drpBirthdateFilter ); var drpBirthdateFilter2 = new DateRangePicker(); drpBirthdateFilter2.ID = "drpBirthdateFilter"; drpBirthdateFilter2.Label = "Birthdate Range"; drpBirthdateFilter2.DelimitedValues = fRegistrants.GetUserPreference( "WL-Birthdate Range" ); phWaitListFormFieldFilters.Controls.Add( drpBirthdateFilter2 ); string dataFieldExpression = "PersonAlias.Person.BirthDate"; var birthdateField = new DateField(); birthdateField.DataField = dataFieldExpression; birthdateField.HeaderText = "Birthdate"; birthdateField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( birthdateField ); var birthdateField2 = new DateField(); birthdateField2.DataField = dataFieldExpression; birthdateField2.HeaderText = "Birthdate"; birthdateField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( birthdateField2 ); var birthdateField3 = new DateField(); birthdateField3.DataField = dataFieldExpression; birthdateField3.HeaderText = "Birthdate"; birthdateField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( birthdateField3 ); break; } case RegistrationPersonFieldType.Grade: { var gpGradeFilter = new GradePicker(); gpGradeFilter.ID = "gpGradeFilter"; gpGradeFilter.Label = "Grade"; gpGradeFilter.UseAbbreviation = true; gpGradeFilter.UseGradeOffsetAsValue = true; gpGradeFilter.CssClass = "input-width-md"; gpGradeFilter.SetValue( fRegistrants.GetUserPreference( "Grade" ).AsIntegerOrNull() ); phRegistrantFormFieldFilters.Controls.Add( gpGradeFilter ); var gpGradeFilter2 = new GradePicker(); gpGradeFilter2.ID = "gpGradeFilter"; gpGradeFilter2.Label = "Grade"; gpGradeFilter2.UseAbbreviation = true; gpGradeFilter2.UseGradeOffsetAsValue = true; gpGradeFilter2.CssClass = "input-width-md"; gpGradeFilter2.SetValue( fRegistrants.GetUserPreference( "WL-Grade" ).AsIntegerOrNull() ); phWaitListFormFieldFilters.Controls.Add( gpGradeFilter2 ); string dataFieldExpression = "PersonAlias.Person.GraduationYear"; var gradeField = new RockBoundField(); gradeField.DataField = dataFieldExpression; gradeField.HeaderText = "Graduation Year"; gradeField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( gradeField ); var gradeField2 = new RockBoundField(); gradeField2.DataField = dataFieldExpression; gradeField2.HeaderText = "Graduation Year"; gradeField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( gradeField2 ); var gradeField3 = new RockBoundField(); gradeField3.DataField = dataFieldExpression; gradeField3.HeaderText = "Graduation Year"; gradeField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( gradeField3 ); break; } case RegistrationPersonFieldType.Gender: { var ddlGenderFilter = new RockDropDownList(); ddlGenderFilter.BindToEnum<Gender>( true ); ddlGenderFilter.ID = "ddlGenderFilter"; ddlGenderFilter.Label = "Gender"; ddlGenderFilter.SetValue( fRegistrants.GetUserPreference( "Gender" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlGenderFilter ); var ddlGenderFilter2 = new RockDropDownList(); ddlGenderFilter2.BindToEnum<Gender>( true ); ddlGenderFilter2.ID = "ddlGenderFilter"; ddlGenderFilter2.Label = "Gender"; ddlGenderFilter2.SetValue( fRegistrants.GetUserPreference( "WL-Gender" ) ); phWaitListFormFieldFilters.Controls.Add( ddlGenderFilter2 ); string dataFieldExpression = "PersonAlias.Person.Gender"; var genderField = new EnumField(); genderField.DataField = dataFieldExpression; genderField.HeaderText = "Gender"; genderField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( genderField ); var genderField2 = new EnumField(); genderField2.DataField = dataFieldExpression; genderField2.HeaderText = "Gender"; genderField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( genderField2 ); var genderField3 = new EnumField(); genderField3.DataField = dataFieldExpression; genderField3.HeaderText = "Gender"; genderField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( genderField3 ); break; } case RegistrationPersonFieldType.MaritalStatus: { var ddlMaritalStatusFilter = new RockDropDownList(); ddlMaritalStatusFilter.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); ddlMaritalStatusFilter.ID = "ddlMaritalStatusFilter"; ddlMaritalStatusFilter.Label = "Marital Status"; ddlMaritalStatusFilter.SetValue( fRegistrants.GetUserPreference( "Marital Status" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlMaritalStatusFilter ); var ddlMaritalStatusFilter2 = new RockDropDownList(); ddlMaritalStatusFilter2.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); ddlMaritalStatusFilter2.ID = "ddlMaritalStatusFilter"; ddlMaritalStatusFilter2.Label = "Marital Status"; ddlMaritalStatusFilter2.SetValue( fRegistrants.GetUserPreference( "WL-Marital Status" ) ); phWaitListFormFieldFilters.Controls.Add( ddlMaritalStatusFilter2 ); string dataFieldExpression = "PersonAlias.Person.MaritalStatusValue.Value"; var maritalStatusField = new RockBoundField(); maritalStatusField.DataField = dataFieldExpression; maritalStatusField.HeaderText = "MaritalStatus"; maritalStatusField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( maritalStatusField ); var maritalStatusField2 = new RockBoundField(); maritalStatusField2.DataField = dataFieldExpression; maritalStatusField2.HeaderText = "MaritalStatus"; maritalStatusField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( maritalStatusField2 ); var maritalStatusField3 = new RockBoundField(); maritalStatusField3.DataField = dataFieldExpression; maritalStatusField3.HeaderText = "MaritalStatus"; maritalStatusField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( maritalStatusField3 ); break; } case RegistrationPersonFieldType.MobilePhone: { var tbPhoneFilter = new RockTextBox(); tbPhoneFilter.ID = "tbPhoneFilter"; tbPhoneFilter.Label = "Phone"; tbPhoneFilter.Text = fRegistrants.GetUserPreference( "Phone" ); phRegistrantFormFieldFilters.Controls.Add( tbPhoneFilter ); var tbPhoneFilter2 = new RockTextBox(); tbPhoneFilter2.ID = "tbPhoneFilter"; tbPhoneFilter2.Label = "Phone"; tbPhoneFilter2.Text = fRegistrants.GetUserPreference( "WL-Phone" ); phWaitListFormFieldFilters.Controls.Add( tbPhoneFilter2 ); var phoneNumbersField = new PhoneNumbersField(); phoneNumbersField.DataField = "PersonAlias.Person.PhoneNumbers"; phoneNumbersField.HeaderText = "Phone(s)"; gRegistrants.Columns.Add( phoneNumbersField ); var phoneNumbersField2 = new PhoneNumbersField(); phoneNumbersField2.DataField = "PersonAlias.Person.PhoneNumbers"; phoneNumbersField2.HeaderText = "Phone(s)"; gGroupPlacements.Columns.Add( phoneNumbersField2 ); var phoneNumbersField3 = new PhoneNumbersField(); phoneNumbersField3.DataField = "PersonAlias.Person.PhoneNumbers"; phoneNumbersField3.HeaderText = "Phone(s)"; gWaitList.Columns.Add( phoneNumbersField3 ); break; } } } else if ( field.Attribute != null ) { var attribute = field.Attribute; // add dynamic filter to registrant grid var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phRegistrantFormFieldFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phRegistrantFormFieldFilters.Controls.Add( wrapper ); } string savedValue = fRegistrants.GetUserPreference( attribute.Key ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { } } } // add dynamic filter to wait list grid var control2 = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control2 != null ) { if ( control2 is IRockControl ) { var rockControl2 = (IRockControl)control2; rockControl2.Label = attribute.Name; rockControl2.Help = attribute.Description; phWaitListFormFieldFilters.Controls.Add( control2 ); } else { var wrapper2 = new RockControlWrapper(); wrapper2.ID = control.ID + "_wrapper"; wrapper2.Label = attribute.Name; wrapper2.Controls.Add( control2 ); phWaitListFormFieldFilters.Controls.Add( wrapper2 ); } string savedValue = fWaitList.GetUserPreference( "WL-" + attribute.Key ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control2, attribute.QualifierValues, values ); } catch { } } } string dataFieldExpression = attribute.Id.ToString() + attribute.Key; bool columnExists = gRegistrants.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.AttributeId = attribute.Id; boundField.HeaderText = attribute.Name; AttributeField boundField2 = new AttributeField(); boundField2.DataField = dataFieldExpression; boundField2.AttributeId = attribute.Id; boundField2.HeaderText = attribute.Name; AttributeField boundField3 = new AttributeField(); boundField3.DataField = dataFieldExpression; boundField3.AttributeId = attribute.Id; boundField3.HeaderText = attribute.Name; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; boundField2.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; boundField3.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gRegistrants.Columns.Add( boundField ); gGroupPlacements.Columns.Add( boundField2 ); gWaitList.Columns.Add( boundField3 ); } } } } // Add fee column var feeField = new RockLiteralField(); feeField.ID = "lFees"; feeField.HeaderText = "Fees"; gRegistrants.Columns.Add( feeField ); var deleteField = new DeleteField(); gRegistrants.Columns.Add( deleteField ); deleteField.Click += gRegistrants_Delete; var groupPickerField = new GroupPickerField(); groupPickerField.HeaderText = "Group"; groupPickerField.RootGroupId = gpGroupPlacementParentGroup.SelectedValueAsInt(); gGroupPlacements.Columns.Add( groupPickerField ); }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { int? selectedGroupTypeId = null; if ( groupTypePicker != null ) { selectedGroupTypeId = groupTypePicker.SelectedGroupTypeId; } groupTypePicker = new GroupTypePicker(); groupTypePicker.ID = filterControl.ID + "_groupTypePicker"; groupTypePicker.Label = "Group Type"; groupTypePicker.GroupTypes = new GroupTypeService( new RockContext() ).Queryable().OrderBy( a => a.Order ).ThenBy( a => a.Name ).ToList(); groupTypePicker.SelectedIndexChanged += groupTypePicker_SelectedIndexChanged; groupTypePicker.AutoPostBack = true; groupTypePicker.SelectedGroupTypeId = selectedGroupTypeId; filterControl.Controls.Add( groupTypePicker ); cblRole = new RockCheckBoxList(); cblRole.Label = "with Group Role(s)"; cblRole.ID = filterControl.ID + "_cblRole"; filterControl.Controls.Add( cblRole ); PopulateGroupRolesCheckList( groupTypePicker.SelectedGroupTypeId ?? 0 ); RockDropDownList ddlGroupMemberStatus = new RockDropDownList(); ddlGroupMemberStatus.CssClass = "js-group-member-status"; ddlGroupMemberStatus.ID = filterControl.ID + "_ddlGroupMemberStatus"; ddlGroupMemberStatus.Label = "with Group Member Status"; ddlGroupMemberStatus.Help = "Select a specific group member status to only include group members with that status. Leaving this blank will return all members."; ddlGroupMemberStatus.BindToEnum<GroupMemberStatus>( true ); ddlGroupMemberStatus.SetValue( GroupMemberStatus.Active.ConvertToInt() ); filterControl.Controls.Add( ddlGroupMemberStatus ); return new Control[3] { groupTypePicker, cblRole, ddlGroupMemberStatus }; }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { base.CreateChildControls(); Controls.Clear(); RockControlHelper.CreateChildControls(this, Controls); this.Attributes["data-itemlabel"] = this.Label != string.Empty ? this.Label : "Address"; this.Attributes["data-required"] = this.Required.ToTrueFalse().ToLower(); _tbStreet1 = new TextBox(); Controls.Add(_tbStreet1); _tbStreet1.ID = "tbStreet1"; _tbStreet1.CssClass = "form-control js-street1"; _tbStreet2 = new TextBox(); Controls.Add(_tbStreet2); _tbStreet2.ID = "tbStreet2"; _tbStreet2.CssClass = "form-control"; _tbCity = new TextBox(); Controls.Add(_tbCity); _tbCity.ID = "tbCity"; _tbCity.CssClass = "form-control js-city"; _tbCounty = new TextBox(); Controls.Add(_tbCounty); _tbCounty.ID = "tbCounty"; _tbCounty.CssClass = "form-control"; _tbState = new TextBox(); Controls.Add(_tbState); _tbState.ID = "tbState"; _tbState.CssClass = "form-control js-state"; _ddlState = new DropDownList(); Controls.Add(_ddlState); _ddlState.ID = "ddlState"; _ddlState.DataValueField = "Id"; _ddlState.CssClass = "form-control js-state"; _tbPostalCode = new TextBox(); Controls.Add(_tbPostalCode); _tbPostalCode.ID = "tbPostalCode"; _tbPostalCode.CssClass = "form-control"; _ddlCountry = new RockDropDownList(); _ddlCountry.EnhanceForLongLists = true; Controls.Add(_ddlCountry); _ddlCountry.ID = "ddlCountry"; _ddlCountry.DataValueField = "Id"; _ddlCountry.AutoPostBack = true; _ddlCountry.SelectedIndexChanged += _ddlCountry_SelectedIndexChanged; _ddlCountry.CssClass = "form-control"; // add custom validator CustomValidator = new CustomValidator(); CustomValidator.ID = this.ID + "_cfv"; CustomValidator.ClientValidationFunction = "Rock.controls.addressControl.clientValidate"; CustomValidator.ErrorMessage = (this.Label != string.Empty ? this.Label : "Address") + " is required."; CustomValidator.CssClass = "validation-error help-inline"; CustomValidator.Enabled = true; CustomValidator.Display = ValidatorDisplay.Dynamic; CustomValidator.ValidationGroup = ValidationGroup; Controls.Add(CustomValidator); string defaultCountry = GetDefaultCountry(); string defaultState = GetDefaultState(); BindCountries(); _ddlCountry.SetValue(defaultCountry); BindStates(defaultCountry); _ddlState.SetValue(defaultState); _tbState.Text = defaultState; }