public void Populate(string targetReference)
        {
            MainDataContext db = new MainDataContext();

            if (_DataTableID != 0)
            {
                _DataTable = db._DataTables.Single(f => f.ID == _DataTableID);


                if (!Page.IsPostBack)
                {
                    var questions = _DataTable.CRM_FormFields.Where(f => f.IsActive && !f.IsArchived).OrderBy(f => f.OrderNo);
                    rptQuestions.DataSource = questions;
                    rptQuestions.DataBind();
                }
            }
            else
            {
                this.Visible = false;
            }


            foreach (RepeaterItem item in rptQuestions.Items)
            {
                int           fieldID   = Int32.Parse(((HiddenField)item.FindControl("hdnID")).Value);
                CRM_FormField formField = db.CRM_FormFields.SingleOrDefault(a => a.ID == fieldID);

                CRM.Controls.Admin.CustomFields.Form.CustomField formQuestionControl = (CRM.Controls.Admin.CustomFields.Form.CustomField)item.FindControl("ucFormQuestion");

                IEnumerable <CRM_FormFieldResponse> answers = db.CRM_FormFieldResponses.Where(r => r.CRM_FormFieldID == formField.ID && r.TargetReference == targetReference);

                formQuestionControl.Populate(answers);
            }
        }
        public bool IsValid()
        {
            MainDataContext db      = new MainDataContext();
            bool            isValid = true;

            foreach (RepeaterItem item in rptQuestions.Items)
            {
                int           fieldID   = Int32.Parse(((HiddenField)item.FindControl("hdnID")).Value);
                CRM_FormField formField = db.CRM_FormFields.SingleOrDefault(a => a.ID == fieldID);

                CRM.Controls.Admin.CustomFields.Form.CustomField formQuestionControl = (CRM.Controls.Admin.CustomFields.Form.CustomField)item.FindControl("ucFormQuestion");
                formQuestionControl.CRM_FormField = formField;

                string selectedValue = formQuestionControl.SelectedValue();

                if ((selectedValue == "" || selectedValue == "-1") && formField.IsRequired)
                {
                    ValidationError.AddValidationError(formField.Name + " is required");
                    isValid = false;
                }
            }

            return(isValid);
        }
        protected void lnkSubmit_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                MainDataContext db      = new MainDataContext();
                bool            isValid = true;


                foreach (RepeaterItem item in rptQuestions.Items)
                {
                    int           fieldID   = Int32.Parse(((HiddenField)item.FindControl("hdnID")).Value);
                    CRM_FormField formField = db.CRM_FormFields.SingleOrDefault(a => a.ID == fieldID);

                    CRM.Controls.Admin.CustomFields.Form.CustomField formQuestionControl = (CRM.Controls.Admin.CustomFields.Form.CustomField)item.FindControl("ucFormQuestion");
                    formQuestionControl.CRM_FormField = formField;
                    string selectedValue = formQuestionControl.SelectedValue();


                    if ((selectedValue == "" || selectedValue == "-1") && formField.IsRequired)
                    {
                        isValid = false;
                        ValidationError.AddValidationError(formField.Name + " is required");
                    }
                    else
                    {
                        IEnumerable <CRM_FormFieldResponse> answers = db.CRM_FormFieldResponses.Where(r => r.TargetReference == TargetReference && r.CRM_FormFieldID == formField.ID);

                        db.CRM_FormFieldResponses.DeleteAllOnSubmit(answers);
                        db.SubmitChanges();

                        if (formField.Type == (byte)CRM_FormField.Types.DropDownList || formField.Type == (byte)CRM_FormField.Types.MultipleRadioButtons)
                        {
                            CRM_FormFieldResponse response = new CRM_FormFieldResponse()
                            {
                                Answer = "",
                                CRM_FormFieldItemID = db.CRM_FormFieldItems.Single(s => s.ID.ToString() == selectedValue).ID,
                                CRM_FormFieldID     = formField.ID,
                                TargetReference     = TargetReference
                            };

                            db.CRM_FormFieldResponses.InsertOnSubmit(response);
                            db.SubmitChanges();
                        }
                        else if (formField.Type == (byte)CRM_FormField.Types.MultiLineTextBox || formField.Type == (byte)CRM_FormField.Types.SingleLineTextBox || formField.Type == (byte)CRM_FormField.Types.SingleCheckBox)
                        {
                            CRM_FormFieldResponse response = new CRM_FormFieldResponse()
                            {
                                Answer = selectedValue,
                                CRM_FormFieldItemID = null,
                                CRM_FormFieldID     = formField.ID,
                                TargetReference     = TargetReference
                            };

                            db.CRM_FormFieldResponses.InsertOnSubmit(response);
                            db.SubmitChanges();
                        }
                        else if (formField.Type == (byte)CRM_FormField.Types.MultipleCheckBoxes)
                        {
                            string[] IDs = selectedValue.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                            foreach (string id in IDs)
                            {
                                CRM_FormFieldResponse response = new CRM_FormFieldResponse();

                                response.Answer = "";
                                response.CRM_FormFieldItemID = db.CRM_FormFieldItems.Single(s => s.ID.ToString() == id).ID;
                                response.CRM_FormFieldID     = formField.ID;
                                response.TargetReference     = TargetReference;

                                db.CRM_FormFieldResponses.InsertOnSubmit(response);
                                db.SubmitChanges();
                            }
                        }
                    }
                }


                if (isValid)
                {
                    db.SubmitChanges();
                }
            }
        }