/// <summary>
        /// 儲存 DataGridView資料到UDT
        /// </summary>
        public void Save()
        {
            List <DAL.UserDefData> InsertData = new List <JointAdmissionModule.DAL.UserDefData>();

            // 檢查資料

            int ssy, sy, ss, sr, srAdd, srp, srpAdd;
            // 檢查年級學期是否重複用
            List <string> chkGrStr = new List <string>();
            bool          hasError = false;

            // 檢查資料並加入組合
            foreach (DataGridViewRow dgr in dgv.Rows)
            {
                if (dgr.IsNewRow)
                {
                    continue;
                }

                DAL.UserDefData udd = new JointAdmissionModule.DAL.UserDefData();
                udd.RefID = _StudentID;

                // 學年度
                if (dgr.Cells[SchoolYear.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[SchoolYear.Index].Value.ToString(), out ssy) == false)
                    {
                        dgr.Cells[SchoolYear.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.SchoolYear = ssy;
                        dgr.Cells[SchoolYear.Index].ErrorText = "";
                    }
                }


                // 年級
                if (dgr.Cells[GradeYear.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[GradeYear.Index].Value.ToString(), out sy) == false)
                    {
                        dgr.Cells[GradeYear.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeYear = sy;
                        dgr.Cells[GradeYear.Index].ErrorText = "";
                    }
                }


                // 學期
                if (dgr.Cells[Semester.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[Semester.Index].Value.ToString(), out ss) == false)
                    {
                        dgr.Cells[Semester.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        if (ss >= 1 && ss <= 2)
                        {
                            udd.Semester = ss;
                            dgr.Cells[Semester.Index].ErrorText = "";
                        }
                        else
                        {
                            dgr.Cells[Semester.Index].ErrorText = "學期必須1或2";
                        }
                    }
                }

                // 年排名
                if (dgr.Cells[GradeRank.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[GradeRank.Index].Value.ToString(), out sr) == false)
                    {
                        dgr.Cells[GradeRank.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRank = sr;
                        dgr.Cells[GradeRank.Index].ErrorText = "";
                    }
                }

                // 加分後年排名
                if (dgr.Cells[GradeRankAdd.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[GradeRankAdd.Index].Value.ToString(), out srAdd) == false)
                    {
                        dgr.Cells[GradeRankAdd.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRankAdd = srAdd;
                        dgr.Cells[GradeRankAdd.Index].ErrorText = "";
                    }
                }

                // 年排名百分比
                if (dgr.Cells[GradeRankPercent.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[GradeRankPercent.Index].Value.ToString(), out srp) == false)
                    {
                        dgr.Cells[GradeRankPercent.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRankPercent = srp;
                        dgr.Cells[GradeRankPercent.Index].ErrorText = "";
                    }
                }

                // 加分後年排名百分比
                if (dgr.Cells[GradeRankPercentAdd.Index].Value != null)
                {
                    if (int.TryParse(dgr.Cells[GradeRankPercentAdd.Index].Value.ToString(), out srpAdd) == false)
                    {
                        dgr.Cells[GradeRankPercentAdd.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRankPercentAdd = srpAdd;
                        dgr.Cells[GradeRankPercentAdd.Index].ErrorText = "";
                    }
                }

                // 檢查是否有錯誤
                if (dgr.Cells[GradeYear.Index].ErrorText != "" || dgr.Cells[Semester.Index].ErrorText != "" || dgr.Cells[GradeRank.Index].ErrorText != "" || dgr.Cells[GradeRankPercent.Index].ErrorText != "")
                {
                    hasError = true;
                }

                // 檢查年級學期是否重複
                if (dgr.Cells[GradeYear.Index].Value != null && dgr.Cells[Semester.Index].Value != null)
                {
                    string strSy = dgr.Cells[SchoolYear.Index].Value.ToString();
                    string strG  = dgr.Cells[GradeYear.Index].Value.ToString();
                    string strS  = dgr.Cells[Semester.Index].Value.ToString();
                    string str   = strSy + strG + strS;
                    if (!chkGrStr.Contains(str))
                    {
                        InsertData.Add(udd);
                        chkGrStr.Add(str);
                    }
                    else
                    {
                        FISCA.Presentation.Controls.MsgBox.Show(strSy + "學年度" + strG + "年級第" + strS + "學期有重複,無法儲存。");
                        hasError = true;
                        break;
                    }
                }
            }

            if (hasError)
            {
                FISCA.Presentation.Controls.MsgBox.Show("資料有誤,無法儲存!");
                return;
            }

            // 檢查沒問題後
            // 刪除舊資料
            // 標要刪除
            foreach (DAL.UserDefData udd in _UserDefDataList)
            {
                udd.Deleted = true;
            }
            DAL.UDTTransfer.DeleteDataToUDT(_UserDefDataList);

            // 新增新資料
            DAL.UDTTransfer.InsertDataToUDT(InsertData);
            //FISCA.Presentation.Controls.MsgBox.Show("儲存完成。");
        }
        /// <summary>
        /// 儲存 DataGridView資料到UDT
        /// </summary>
        public void Save()
        {
            List<DAL.UserDefData> InsertData = new List<JointAdmissionModule.DAL.UserDefData>();

            // 檢查資料

            int ssy,sy, ss, sr,srAdd,srp,srpAdd;
            // 檢查年級學期是否重複用
            List<string> chkGrStr = new List<string>();
            bool hasError = false;
            // 檢查資料並加入組合
            foreach (DataGridViewRow dgr in dgv.Rows)
            {

                if (dgr.IsNewRow)
                    continue;

                DAL.UserDefData udd = new JointAdmissionModule.DAL.UserDefData();
                udd.RefID = _StudentID;

                // 學年度
                if (dgr.Cells[SchoolYear.Index].Value != null)
                    if (int.TryParse(dgr.Cells[SchoolYear.Index].Value.ToString(), out ssy) == false)
                    {
                        dgr.Cells[SchoolYear.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.SchoolYear = ssy;
                        dgr.Cells[SchoolYear.Index].ErrorText = "";
                    }

                // 年級
                if (dgr.Cells[GradeYear.Index].Value != null)
                    if (int.TryParse(dgr.Cells[GradeYear.Index].Value.ToString(), out sy) == false)
                    {
                        dgr.Cells[GradeYear.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeYear = sy;
                        dgr.Cells[GradeYear.Index].ErrorText = "";
                    }

                // 學期
                if (dgr.Cells[Semester.Index].Value != null)
                    if (int.TryParse(dgr.Cells[Semester.Index].Value.ToString(), out ss) == false)
                    {
                        dgr.Cells[Semester.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        if (ss >= 1 && ss <= 2)
                        {
                            udd.Semester = ss;
                            dgr.Cells[Semester.Index].ErrorText = "";
                        }
                        else
                            dgr.Cells[Semester.Index].ErrorText = "學期必須1或2";
                    }

                // 年排名
                if (dgr.Cells[GradeRank.Index].Value != null)
                    if (int.TryParse(dgr.Cells[GradeRank.Index].Value.ToString(), out sr) == false)
                    {
                        dgr.Cells[GradeRank.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRank = sr;
                        dgr.Cells[GradeRank.Index].ErrorText = "";
                    }

                // 加分後年排名
                if (dgr.Cells[GradeRankAdd.Index].Value != null)
                    if (int.TryParse(dgr.Cells[GradeRankAdd.Index].Value.ToString(), out srAdd) == false)
                    {
                        dgr.Cells[GradeRankAdd.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRankAdd = srAdd;
                        dgr.Cells[GradeRankAdd.Index].ErrorText = "";
                    }

                // 年排名百分比
                if (dgr.Cells[GradeRankPercent.Index].Value != null)
                    if (int.TryParse(dgr.Cells[GradeRankPercent.Index].Value.ToString(), out srp) == false)
                    {
                        dgr.Cells[GradeRankPercent.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRankPercent = srp;
                        dgr.Cells[GradeRankPercent.Index].ErrorText = "";
                    }

                // 加分後年排名百分比
                if (dgr.Cells[GradeRankPercentAdd.Index].Value != null)
                    if (int.TryParse(dgr.Cells[GradeRankPercentAdd.Index].Value.ToString(), out srpAdd) == false)
                    {
                        dgr.Cells[GradeRankPercentAdd.Index].ErrorText = "請填整數!";
                    }
                    else
                    {
                        udd.GradeRankPercentAdd = srpAdd;
                        dgr.Cells[GradeRankPercentAdd.Index].ErrorText = "";
                    }

                // 檢查是否有錯誤
                if(dgr.Cells[GradeYear.Index].ErrorText !="" || dgr.Cells[Semester.Index].ErrorText != "" || dgr.Cells[GradeRank.Index].ErrorText != "" || dgr.Cells[GradeRankPercent.Index].ErrorText != "")
                    hasError =true ;

                // 檢查年級學期是否重複
                if (dgr.Cells[GradeYear.Index].Value != null && dgr.Cells[Semester.Index].Value != null)
                {
                    string strSy = dgr.Cells[SchoolYear.Index].Value.ToString();
                    string strG = dgr.Cells[GradeYear.Index].Value.ToString();
                    string strS=dgr.Cells[Semester.Index].Value.ToString();
                    string str = strSy+strG + strS;
                    if (!chkGrStr.Contains(str))
                    {
                        InsertData.Add(udd);
                        chkGrStr.Add(str);
                    }
                    else
                    {
                        FISCA.Presentation.Controls.MsgBox.Show(strSy+"學年度"+strG +"年級第"+strS+"學期有重複,無法儲存。");
                        hasError = true;
                        break;
                    }
                }
            }

            if (hasError)
            {
                FISCA.Presentation.Controls.MsgBox.Show("資料有誤,無法儲存!");
                return;
            }

            // 檢查沒問題後
            // 刪除舊資料
            // 標要刪除
            foreach (DAL.UserDefData udd in _UserDefDataList)
                udd.Deleted = true;
            DAL.UDTTransfer.DeleteDataToUDT(_UserDefDataList);

            // 新增新資料
            DAL.UDTTransfer.InsertDataToUDT(InsertData);
            //FISCA.Presentation.Controls.MsgBox.Show("儲存完成。");
        }