/// <summary>
        ///
        /// </summary>
        private void PopulateForm()
        {
            if (!string.IsNullOrEmpty(SurveyIdField.Value))
            {
                int    surveyId = int.Parse(SurveyIdField.Value);
                Survey biz      = new Survey();
                biz.Get(surveyId);
                base.PopulateForm(biz);

                // populate survey items
                DataView surveyItems = SurveyItem.GetByParentAsDataView <SurveyItem>(surveyId);
                SurveyItemsGrid.DataSource = surveyItems;
                SurveyItemsGrid.DataBind();

                // set related record if exists
                int       patientItemId  = int.Parse(base.DecrypyValue(PatientItemId.Value));
                DataTable relatedRecords = RelatedRecordsDa.GetRecord("ProtocolMgr_PatientItems", patientItemId, "Surveys", surveyId);
                if (relatedRecords.Rows.Count > 0)
                {
                    RelatedRecordId.Value = relatedRecords.Rows[0][RelatedRecord.RelatedRecordId].ToString();
                }
            }
            else
            {
                // show empty grid by builing empty data table
                DataTable dt = new DataTable();
                dt.Columns.AddRange((from col in new SurveyItem().FieldNames
                                     select new DataColumn(col)).ToArray());
                SurveyItemsGrid.DataSource = dt.DefaultView;
                SurveyItemsGrid.DataBind();
            }
            SurveyPluginControl.SetSurveyIdField(SurveyIdField.Value);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void SaveClick(object sender, EventArgs e)
        {
            // save survey
            Survey biz = new Survey();

            if (!string.IsNullOrEmpty(SurveyIdField.Value))
            {
                biz.Get(int.Parse(SurveyIdField.Value));
            }
            // if save was NOT triggerd from plugin, then save with form fields
            if (string.IsNullOrEmpty(SaveFromPlugin.Value))
            {
                CICHelper.SetBOValues(this.Controls, biz, int.Parse(BaseDecryptedPatientId));
                biz.Save();
                int surveyId = (int)biz[Survey.SurveyId];
                SurveyIdField.Value = surveyId.ToString();

                // save survey items
                SurveyItemsGrid.Save(surveyId);
            }

            SurveyPluginControl.SetSurveyIdField(SurveyIdField.Value);

            // create patient item if needed
            PatientItem item = new PatientItem();
            int         patientItemId;

            if (!string.IsNullOrEmpty(PatientItemId.Value))
            {
                item.Get(int.Parse(base.DecrypyValue(PatientItemId.Value)));
            }
            else
            {
                item[PatientItem.PatientSchemaId] = PatientSchemaId;
                item[PatientItem.Status]          = "Unplanned";
            }
            item[PatientItem.ScheduledDate] = FieldSurveyDate.Value;
            item.Save();
            patientItemId       = (int)item[item.PrimaryKeyName];
            PatientItemId.Value = base.EncryptValue(patientItemId.ToString());

            // now create association via related records
            int relatedRecordId = PatientProtocolController.CreateUnplannedVisitRelatedRecord(patientItemId, biz.TableName, int.Parse(SurveyIdField.Value));

            RelatedRecordId.Value = relatedRecordId.ToString();

            // don't register update script if triggered from add new row
            if (sender != AddNewRowBtn)
            {
                // register update script
                RegisterUpdateScript(false);
            }
            // otherwise repopulate form
            else
            {
                PopulateForm();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void DeleteClick(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(SurveyIdField.Value))
            {
                Survey biz = new Survey();
                biz.Delete(int.Parse(SurveyIdField.Value));
                SurveyIdField.Value = string.Empty;
                SurveyPluginControl.SetSurveyIdField(SurveyIdField.Value);

                // delete associated record
                RelatedRecord relatedRecord = new RelatedRecord();
                relatedRecord.Delete(int.Parse(RelatedRecordId.Value));

                // register update script
                RegisterUpdateScript(true);
            }
        }