예제 #1
0
 /// <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);
 }
예제 #2
0
        /// <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);
        }