protected void btnSave_Click(object sender, System.EventArgs e)
    {
        if (Valid() == true)
        {
            bool ret = false;

            DbTrans trans = new DbTrans();
            trans.CreateTransaction();

            string LoginName = "SYSTEM";

            QuestionnaireENG eng = new QuestionnaireENG();

            AnswerPara ans = new AnswerPara();
            ans.QUESTIONNAIRE_ID =Convert.ToInt64(txtID.Text);
            ans.ANSWER_NAME = "System Admin";
            ans.ANSWER_DATE = DateTime.Now;
            ans.SESSION_ID = Session.SessionID;

            if (eng.SaveAnswer(ans, LoginName, trans) == true)
            {
                for (int m = 0; m < gvSection.Rows.Count; m++)
                {
                    GridView gvQuestion = (GridView)gvSection.Rows[m].Cells[1].FindControl("gvQuestion");
                    for (int i = 0; i < gvQuestion.Rows.Count; i++)
                    {
                        Label lblQuestionName = (Label)gvQuestion.Rows[i].Cells[2].FindControl("lblQuestionName");
                        long QuestionID = Convert.ToInt64(gvQuestion.Rows[i].Cells[0].Text);

                        AnswerResultPara Apara = new AnswerResultPara();
                        //Apara.ANSWER_NAME =
                        //Apara.QUESTIONNAIRE_ID = Convert.ToInt64(txtID.Text);
                        Apara.ANSWER_ID = eng.ANSWER_ID;
                        Apara.QUESTIONNAIRE_QUESTION_ID = QuestionID;
                        Label lblChoiceTypeID = (Label)gvQuestion.Rows[i].Cells[1].FindControl("lblChoiceTypeID");
                        Label lblQuestionPoint = (Label)gvQuestion.Rows[i].Cells[1].FindControl("lblQuestionPoint");

                        if (lblChoiceTypeID.Text == "1")
                        {
                            //Section
                            long SectionID = Convert.ToInt64(gvSection.Rows[m].Cells[0].Text);
                            QuestionnaireSectionPara QsPara = eng.GetQuestionnaireSectionPara(SectionID, trans);
                            if (QsPara.SECTION_TYPE_ID == 1)
                            {
                                //แบบหลายตัวเลือก ตอบได้ 1 ข้อ สำหรับส่วนที่ 1
                                RadioButtonList rdiChoice = (RadioButtonList)gvQuestion.Rows[i].Cells[2].FindControl("rdiChoice");
                                if (rdiChoice.SelectedValue != "")
                                {
                                    QuestionnaireQuestionsChoicePara ctPara = eng.GetQuestionnaireQuestionChoicePara(Convert.ToInt64(rdiChoice.SelectedValue), trans);
                                    Apara.CHOICE_TYPE_ID = 1;
                                    Apara.RESULT_CHOICE_NAME = rdiChoice.SelectedItem.Text;
                                    Apara.POINT = ctPara.POINT;
                                    if (ctPara.IS_OTHER == 'Y')
                                    {
                                        TextBox txtRadioChoice = (TextBox)gvQuestion.Rows[i].Cells[2].FindControl("txtRadioChoice");
                                        Apara.RESULT_CHOICE_NAME = txtRadioChoice.Text;
                                    }
                                    ret = eng.SaveAnswerResult(Apara, LoginName, trans);
                                }
                            }
                            else if (QsPara.SECTION_TYPE_ID == 2)
                            {
                                //แบบหลายตัวเลือก ตอบได้ 1 ข้อ สำหรับส่วนที่ 2
                                RadioButtonList rdiSec2Choice = (RadioButtonList)gvQuestion.Rows[i].Cells[3].FindControl("rdiSec2Choice");
                                if (rdiSec2Choice.SelectedValue != "")
                                {
                                    Apara.CHOICE_TYPE_ID = 1;
                                    Apara.RESULT_CHOICE_NAME = rdiSec2Choice.SelectedValue;
                                    Apara.POINT = Convert.ToDouble(rdiSec2Choice.SelectedValue);
                                    ret = eng.SaveAnswerResult(Apara, LoginName, trans);
                                }
                            }
                        }
                        else if (lblChoiceTypeID.Text == "2")
                        {
                            //แบบหลายตัวเลือก ตอบได้มากกว่า 1 ข้อ
                            CheckBoxList chkChoice = (CheckBoxList)gvQuestion.Rows[i].Cells[2].FindControl("chkChoice");
                            for (int j = 0; j < chkChoice.Items.Count; j++)
                            {
                                if (chkChoice.Items[j].Selected)
                                {
                                    Apara.CHOICE_TYPE_ID = 2;
                                    Apara.RESULT_CHOICE_NAME = chkChoice.Items[j].Text;
                                    QuestionnaireQuestionsChoicePara ctPara = eng.GetQuestionnaireQuestionChoicePara(Convert.ToInt64(chkChoice.Items[j].Value), trans);
                                    Apara.POINT = ctPara.POINT;
                                    if (ctPara.IS_OTHER == 'Y')
                                    {
                                        TextBox txtCheckBoxChoice = (TextBox)gvQuestion.Rows[i].Cells[2].FindControl("txtCheckBoxChoice");
                                        Apara.RESULT_CHOICE_NAME = txtCheckBoxChoice.Text;
                                    }

                                    ret = eng.SaveAnswerResult(Apara, LoginName, trans);
                                }
                            }
                        }
                        else if (lblChoiceTypeID.Text == "3")
                        {
                            //แบบให้ความเห็น ระบุเป็นข้อความ
                            TextBox txtChoice = (TextBox)gvQuestion.Rows[i].Cells[2].FindControl("txtChoice");
                            Apara.CHOICE_TYPE_ID = 3;
                            Apara.RESULT_CHOICE_NAME = txtChoice.Text;
                            Apara.POINT = Convert.ToInt64(lblQuestionPoint.Text);
                            ret = eng.SaveAnswerResult(Apara, LoginName, trans);
                        }
                        else if (lblChoiceTypeID.Text == "4")
                        {
                            //แบบให้ความเห็น ระบุเป็นตัวเลข
                            TextBox txtChoice = (TextBox)gvQuestion.Rows[i].Cells[2].FindControl("txtChoice");
                            Apara.CHOICE_TYPE_ID = 4;
                            Apara.RESULT_CHOICE_NAME = txtChoice.Text;
                            Apara.POINT = Convert.ToInt64(lblQuestionPoint.Text);
                            ret = eng.SaveAnswerResult(Apara, LoginName, trans);
                        }

                        if (ret == false)
                        {
                            break;
                        }
                    }
                }
                if (ret == true)
                    trans.CommitTransaction();
                else
                {
                    trans.RollbackTransaction();
                    Config.SetAlert("Error!!!", this);
                }
            }
            else
            {
                trans.RollbackTransaction();
                Config.SetAlert("Answer Error!!!", this);
            }
        }
    }
    protected void gvQuestion_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (IsPostBack == false)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DbTrans trans = new DbTrans();
                trans.CreateTransaction();
                long QuestionID = Convert.ToInt64(e.Row.Cells[0].Text);
                QuestionnaireENG eng = new QuestionnaireENG();
                QuestionnaireQuestionsPara para = eng.GetQuestionQuestionPara(QuestionID, trans);
                QuestionnaireSectionPara secPara = eng.GetQuestionnaireSectionPara(para.QUESTIONNAIRE_SECTION_ID, trans);

                if (secPara.SECTION_TYPE_ID == 1)
                {
                    if (para.CHOICE_TYPE_ID == 1)
                    {
                        DataTable dt = eng.GetChoiceList(QuestionID, trans);
                        DataTable dtConfig = eng.GetQuestionConfig(QuestionID, trans);
                        if (dt.Rows.Count > 0)
                        {
                            RadioButtonList rdiChoice = (RadioButtonList)e.Row.Cells[2].FindControl("rdiChoice");
                            foreach (DataRow dr in dtConfig.Rows)
                            {
                                if (dr["config_name"].ToString() == "RepeatDirection")
                                {
                                    rdiChoice.RepeatDirection = (dr["config_value"].ToString() == "Horizontal" ? RepeatDirection.Horizontal : RepeatDirection.Vertical);
                                }
                            }

                            rdiChoice.Visible = true;
                            rdiChoice.DataTextField = "choice_name";
                            rdiChoice.DataValueField = "id";
                            rdiChoice.DataSource = dt;
                            rdiChoice.DataBind();
                            //rdiChoice.SelectedValue=

                            Label lblTextChoiceName = (Label)e.Row.Cells[2].FindControl("lblTextChoiceName");

                            int j = 0;
                            foreach (DataRow dr in dt.Rows)
                            {
                                if (dr["is_other"].ToString() == "Y")
                                {
                                    TextBox txtRadioChoice = (TextBox)e.Row.Cells[2].FindControl("txtRadioChoice");
                                    txtRadioChoice.Visible = true;
                                    rdiChoice.AutoPostBack = true;
                                }
                                if (dr["is_default"].ToString() == "Y") {
                                    rdiChoice.Items[j].Selected = true;
                                }
                                j++;
                            }
                        }
                    }
                    else if (para.CHOICE_TYPE_ID == 2) {
                        DataTable dt = eng.GetChoiceList(QuestionID, trans);
                        if (dt.Rows.Count > 0)
                        {
                            CheckBoxList chkChoice = (CheckBoxList)e.Row.Cells[2].FindControl("chkChoice");
                            chkChoice.Visible = true;
                            chkChoice.DataTextField = "choice_name";
                            chkChoice.DataValueField = "id";
                            chkChoice.DataSource = dt;
                            chkChoice.DataBind();

                            int j = 0;
                            foreach (DataRow dr in dt.Rows)
                            {
                                if (dr["is_other"].ToString() == "Y")
                                {
                                    TextBox txtCheckBoxChoice = (TextBox)e.Row.Cells[2].FindControl("txtCheckBoxChoice");
                                    txtCheckBoxChoice.Visible = true;
                                    chkChoice.AutoPostBack = true;
                                }
                                if (dr["is_default"].ToString() == "Y")
                                {
                                    chkChoice.Items[j].Selected = true;
                                }
                                j++;
                            }
                        }
                    }
                    else if (para.CHOICE_TYPE_ID == 3) {
                        TextBox txtChoice = (TextBox)e.Row.Cells[2].FindControl("txtChoice");
                        txtChoice.Visible = true;

                        DataTable dt = eng.GetChoiceList(QuestionID, trans);
                        if (dt.Rows.Count > 0)
                        {
                            Label lblTextChoiceName = (Label)e.Row.Cells[2].FindControl("lblTextChoiceName");
                            lblTextChoiceName.Visible = true;
                            lblTextChoiceName.Text = dt.Rows[0]["choice_name"].ToString();
                        }
                    }
                    else if (para.CHOICE_TYPE_ID == 4)
                    {
                        TextBox txtChoice = (TextBox)e.Row.Cells[2].FindControl("txtChoice");
                        txtChoice.Visible = true;

                        DataTable dt = eng.GetChoiceList(QuestionID, trans);
                        if (dt.Rows.Count > 0)
                        {
                            Label lblTextChoiceName = (Label)e.Row.Cells[2].FindControl("lblTextChoiceName");
                            lblTextChoiceName.Visible = true;
                            lblTextChoiceName.Text = dt.Rows[0]["choice_name"].ToString();
                        }
                    }
                }
                else if (secPara.SECTION_TYPE_ID == 2)
                {
                    RadioButtonList rdiSec2Choice = (RadioButtonList)e.Row.Cells[3].FindControl("rdiSec2Choice");
                    rdiSec2Choice.Visible = true;
                    rdiSec2Choice.Width = 40 * Convert.ToInt16(secPara.CHOICE_QTY);
                    for (int i = 0; i < secPara.CHOICE_QTY; i++)
                    {
                        rdiSec2Choice.Items.Add(new ListItem((i + 1).ToString(), (i + 1).ToString()));
                    }
                }
                trans.CommitTransaction();
            }
        }
    }