void BuildEditForm()
        {
            var            fieldSettingsTable = FieldSettingsController.GetFieldSettingsTable(ModuleId);
            var            editForm           = new List <FormColumnInfo>();
            FormColumnInfo currentField;
            var            security = new ModuleSecurity(ModuleContext);

            _editControls = new EditControls(ModuleContext);

            foreach (DataRow dr in Data.Tables[DataSetTableName.Fields].Rows)
            {
                var fieldTitle   = dr[FieldsTableColumn.Title].AsString();
                var dataTypeName = dr[FieldsTableColumn.Type].AsString();
                var dataType     = DataType.ByName(dataTypeName);

                var isColumnEditable =
                    Convert.ToBoolean((!dataType.SupportsHideOnEdit ||
                                       Convert.ToBoolean(dr[FieldsTableColumn.ShowOnEdit])) &&
                                      (!Convert.ToBoolean(dr[FieldsTableColumn.IsPrivate]) ||
                                       security.IsAllowedToEditAllColumns()));

                //If Column is hidden, the Fieldtype falls back to "String" as the related EditControl works perfect even if it is not visibile
                //EditControls of other user defined datatypes may use core controls (e.g. UrlControl or RTE) which are not rock solid regarding viewstate.
                if (!isColumnEditable && dataType.IsUserDefinedField)
                {
                    dataTypeName = "String";
                }

                currentField = new FormColumnInfo {
                    IsUserDefinedField = dataType.IsUserDefinedField
                };

                if (dataType.IsSeparator)
                {
                    var fieldId = (int)dr[FieldsTableColumn.Id];
                    currentField.IsCollapsible = Data.Tables[DataSetTableName.FieldSettings].GetFieldSetting("IsCollapsible", fieldId).AsBoolean();
                    currentField.IsSeparator   = true;
                    if (dr[FieldsTableColumn.Visible].AsBoolean())
                    {
                        currentField.Title = fieldTitle;
                    }
                    currentField.Visible = isColumnEditable;
                }
                else
                {
                    currentField.Help     = dr[FieldsTableColumn.HelpText].AsString();
                    currentField.Title    = dr[FieldsTableColumn.Title].AsString();
                    currentField.Required =
                        Convert.ToBoolean(dr[FieldsTableColumn.Required].AsBoolean() &&
                                          dataType.IsUserDefinedField);

                    //advanced Settings: Dynamic control
                    currentField.EditControl = _editControls.Add(dr[FieldsTableColumn.Title].AsString(),
                                                                 dataTypeName, Convert.ToInt32(dr[FieldsTableColumn.Id]),
                                                                 dr[FieldsTableColumn.HelpText].AsString(),
                                                                 dr[FieldsTableColumn.Default].AsString(),
                                                                 dr[FieldsTableColumn.Required].AsBoolean(),
                                                                 dr[FieldsTableColumn.ValidationRule].AsString(),
                                                                 dr[FieldsTableColumn.ValidationMessage].AsString(),
                                                                 dr[FieldsTableColumn.EditStyle].AsString(),
                                                                 dr[FieldsTableColumn.InputSettings].AsString(),
                                                                 dr[FieldsTableColumn.OutputSettings].AsString(),
                                                                 dr[FieldsTableColumn.NormalizeFlag].AsBoolean(),
                                                                 dr[FieldsTableColumn.MultipleValues].AsBoolean(),
                                                                 fieldSettingsTable,
                                                                 this);
                    currentField.Visible = isColumnEditable;
                }
                editForm.Add(currentField);
            }

            if (CaptchaNeeded())
            {
                if (!Settings.PreferReCaptcha)
                {
                    // use DnnCaptcha
                    _ctlCaptcha = new CaptchaControl
                    {
                        ID            = "Captcha",
                        CaptchaWidth  = Unit.Pixel(130),
                        CaptchaHeight = Unit.Pixel(40),
                        ToolTip       = Localization.GetString("CaptchaToolTip", LocalResourceFile),
                        ErrorMessage  = Localization.GetString("CaptchaError", LocalResourceFile)
                    };
                    currentField = new FormColumnInfo
                    {
                        Title              = Localization.GetString("Captcha", LocalResourceFile),
                        EditControl        = _ctlCaptcha,
                        Visible            = true,
                        IsUserDefinedField = false
                    };
                    editForm.Add(currentField);
                }
            }

            var enableFormTemplate = Settings.EnableFormTemplate;
            var formTemplate       = Settings.FormTemplate;

            if (enableFormTemplate && !string.IsNullOrEmpty(formTemplate))
            {
                BuildTemplateForm(editForm, formTemplate);
            }
            else
            {
                BuildCssForm(editForm);
            }
            //Change captions of buttons in Form mode
            if (IsNewRow && Settings.ListOrForm.Contains("Form"))
            {
                cmdUpdate.Attributes["resourcekey"] = "cmdSend.Text";
            }
        }
        private void BuildUDFieldForm()
        {
            List<UDFieldInfo> list = (from p in Cache_UdtList where p.TypeId == TypeId select p).ToList();
            if (list.Count < 1)
            {
                if (tblUserDefinedField.Visible == true)
                {
                    tblUserDefinedField.Rows.Clear();
                    tblUserDefinedField.Visible = false;
                }
                return;
            }
            List<FormColumnInfo> listEditFrom = new List<FormColumnInfo>();
            FormColumnInfo objColumn;
            ListEditControls = new EditControls(ModuleContext);

            foreach (UDFieldInfo objUDField in list)
            {
                objColumn = new FormColumnInfo();
                objColumn.Name = objUDField.FieldName;
                objColumn.IsUserDefinedField = true;
                objColumn.Help = objUDField.HelpText;
                objColumn.Title = (objUDField.FieldTitle == null || objUDField.FieldTitle.Trim() == "") ? objUDField.FieldName : objUDField.FieldTitle;
                objColumn.Required = objUDField.Required;
                objColumn.Visible = true;
                objColumn.EditControl = ListEditControls.Add(objColumn.Name, objColumn.Title, objUDField.FieldType, objUDField.Id, objColumn.Help, objUDField.DefaultValue, objColumn.Required,
                    objUDField.ValidationRule, objUDField.ValidationMessage, objUDField.EditStyle, objUDField.InputSettings, objUDField.OutputSettings, objUDField.NormalizeFlag);
                listEditFrom.Add(objColumn);
            }
            BuildFormAsTable(listEditFrom);
        }