/// <summary> /// Handles the EditValueUpdated event of the FieldVisibilityWrapper control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="args">The <see cref="FieldVisibilityWrapper.FieldEventArgs"/> instance containing the event data.</param> private void FieldVisibilityWrapper_EditValueUpdated(object sender, FieldVisibilityWrapper.FieldEventArgs args) { FieldVisibilityWrapper.ApplyFieldVisibilityRules(phFields); }
/// <summary> /// Builds the controls for the Fields placeholder. /// </summary> /// <param name="setValues">if set to <c>true</c> [set values].</param> private void BuildFields(bool setValues) { phFields.Controls.Clear(); if (this.RegistrationTemplate.Forms == null) { return; } foreach (var form in this.RegistrationTemplate.Forms.OrderBy(f => f.Order)) { if (form.Fields == null) { continue; } foreach (var field in form.Fields.OrderBy(f => f.Order)) { // NOTE: We will only have Registration Attributes displayed and editable on Registrant Detail. // To Edit Person or GroupMember Attributes, they will have to go the PersonDetail or GroupMemberDetail blocks if (field.FieldSource == RegistrationFieldSource.RegistrantAttribute) { if (field.AttributeId.HasValue) { object fieldValue = RegistrantState.FieldValues.ContainsKey(field.Id) ? RegistrantState.FieldValues[field.Id].FieldValue : null; string value = setValues && fieldValue != null?fieldValue.ToString() : null; var attribute = AttributeCache.Get(field.AttributeId.Value); if ((setValues && value == null) || (value.IsNullOrWhiteSpace() && field.IsRequired == true)) { // If the value was not set already, or if it is required and currently empty then use the default // Intentionally leaving the possibility of saving an empty string as the value for non-required fields. value = attribute.DefaultValue; } FieldVisibilityWrapper fieldVisibilityWrapper = new FieldVisibilityWrapper { ID = "_fieldVisibilityWrapper_attribute_" + attribute.Id.ToString(), RegistrationTemplateFormFieldId = field.Id, FieldVisibilityRules = field.FieldVisibilityRules }; fieldVisibilityWrapper.EditValueUpdated += FieldVisibilityWrapper_EditValueUpdated; phFields.Controls.Add(fieldVisibilityWrapper); var editControl = attribute.AddControl(fieldVisibilityWrapper.Controls, value, BlockValidationGroup, setValues, true, field.IsRequired, null, field.Attribute.Description); fieldVisibilityWrapper.EditControl = editControl; bool hasDependantVisibilityRule = form.Fields.Any(a => a.FieldVisibilityRules.RuleList.Any(r => r.ComparedToRegistrationTemplateFormFieldGuid == field.Guid)); if (hasDependantVisibilityRule && attribute.FieldType.Field.HasChangeHandler(editControl)) { attribute.FieldType.Field.AddChangeHandler(editControl, () => { fieldVisibilityWrapper.TriggerEditValueUpdated(editControl, new FieldVisibilityWrapper.FieldEventArgs(attribute, editControl)); }); } } } } } FieldVisibilityWrapper.ApplyFieldVisibilityRules(phFields); }