private void LoadSubFormData()
 {
     if (lvStudQuizData.SelectedItems.Count == 1)
     {
         DAO.UDT_StudQuizDataDef sqd = lvStudQuizData.SelectedItems[0].Tag as DAO.UDT_StudQuizDataDef;
         if (sqd != null)
         {
             Forms.StudQuizDataForm sqdf = new Forms.StudQuizDataForm(sqd, Forms.StudQuizDataForm.EditMode.Edit, PrimaryKey);
             sqdf.ShowDialog();
         }
         _BGRun();
     }
 }
        private void btnDel_Click(object sender, EventArgs e)
        {
            // 刪除
            if (lvStudQuizData.SelectedItems.Count == 1)
            {
                DAO.UDT_StudQuizDataDef sqd = lvStudQuizData.SelectedItems[0].Tag as DAO.UDT_StudQuizDataDef;
                if (sqd != null)
                {
                    if (FISCA.Presentation.Controls.MsgBox.Show("請問刪除測驗資料", "刪除測驗資料", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        List <DAO.UDT_StudQuizDataDef> delData = new List <DAO.UDT_StudQuizDataDef> ();
                        delData.Add(sqd);
                        K12.Data.StudentRecord rec     = K12.Data.Student.SelectByID(PrimaryKey);
                        StringBuilder          logData = new StringBuilder();
                        logData.AppendLine("刪除" + Utility.ConvertString1(rec));
                        logData.AppendLine("測驗名稱「 " + lvStudQuizData.SelectedItems[0].SubItems[0].Text + " 」");
                        if (sqd.ImplementationDate.HasValue)
                        {
                            logData.AppendLine("實施日期:" + sqd.ImplementationDate.Value.ToShortDateString());
                        }
                        if (sqd.AnalysisDate.HasValue)
                        {
                            logData.AppendLine("解析日期:" + sqd.AnalysisDate.Value.ToShortDateString());
                        }
                        XElement elmContent = Utility.ConvertStringToXelm1(sqd.Content);
                        if (elmContent != null)
                        {
                            foreach (XElement elm in elmContent.Elements("Item"))
                            {
                                if (elm.Attribute("name") != null && elm.Attribute("value") != null)
                                {
                                    logData.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value);
                                }
                            }
                        }

                        _UDTTransfer.DeleteStudQuizDataLlist(delData);

                        // log
                        _LogTransfer.SaveLog("學生.輔導相關測驗-刪除", "刪除", "student", PrimaryKey, logData);

                        _BGRun();
                    }
                }
            }
        }
        public StudQuizDataForm(DAO.UDT_StudQuizDataDef sqd,EditMode editMode,string StudentID)
        {
            InitializeComponent();
            _EditMode = editMode;
            _RowNameList = new List<string>();
            _StudQuizData = sqd;
            _UDTTransfer = new DAO.UDTTransfer();
            _AllQuiz = _UDTTransfer.GetAllQuizData();
            _quizFieldNameList = new List<DAO.SortData1>();
            _StudentID = StudentID;
            _LogTransfer = new DAO.LogTransfer();

            // 將測驗名稱放入
            List<string> nameList = (from data in _AllQuiz orderby data.QuizName select data.QuizName).ToList();
            cbxQuizName.Items.AddRange(nameList.ToArray());

            ReLoadQuizFieldNameList();
        }
        public StudQuizDataForm(DAO.UDT_StudQuizDataDef sqd, EditMode editMode, string StudentID)
        {
            InitializeComponent();
            _EditMode          = editMode;
            _RowNameList       = new List <string>();
            _StudQuizData      = sqd;
            _UDTTransfer       = new DAO.UDTTransfer();
            _AllQuiz           = _UDTTransfer.GetAllQuizData();
            _quizFieldNameList = new List <DAO.SortData1>();
            _StudentID         = StudentID;
            _LogTransfer       = new DAO.LogTransfer();

            // 將測驗名稱放入
            List <string> nameList = (from data in _AllQuiz orderby data.QuizName select data.QuizName).ToList();

            cbxQuizName.Items.AddRange(nameList.ToArray());

            ReLoadQuizFieldNameList();
        }
        /// <summary>
        /// 分批執行匯入
        /// </summary>
        /// <param name="Rows">IRowStream物件列表</param>
        /// <returns>分批匯入完成訊息</returns>
        public override string Import(List<IRowStream> Rows)
        {
            if (mOption.Action == ImportAction.InsertOrUpdate)
            {
                try
                {
                    // log
                    DAO.LogTransfer _logTransfer = new DAO.LogTransfer();

                    List<DAO.UDT_StudQuizDataDef> StudQuizDataList = new List<DAO.UDT_StudQuizDataDef>();
                    List<DAO.UDT_StudQuizDataDef> DelQuizDataList = new List<DAO.UDT_StudQuizDataDef>();
                    List<DAO.UDT_StudQuizDataDef> HasQuizDataList = new List<DAO.UDT_StudQuizDataDef>();
                    // 新增 Log
                    Dictionary<int,StringBuilder> Log_Insert =new Dictionary<int,StringBuilder> ();
                    // 刪除 Log
                    Dictionary<int, StringBuilder> Log_Delete = new Dictionary<int, StringBuilder>();

                    List<string> studentNumberList = new List<string>();
                    List<string> ClassSeatNoList = new List<string>();

                    // 取得試別有學生資料
                    HasQuizDataList = _UDTTransfer.GetStudQuizDataByQuizID(_QuizID);
                    int count = 0;
                    string AuthorID = Utility.GetAuthorID();
                    foreach (IRowStream irs in Rows)
                    {
                        count++;
                        this.ImportProgress = count;
                        int sid = 0;
                        // 依學號比對
                        if (irs.Contains("學號") && irs.Contains("狀態"))
                        {
                            if (Global._StudentStatusDBDict.ContainsKey(irs.GetValue("狀態")))
                            {
                                sid = Utility.GetStudentID(irs.GetValue("學號"), irs.GetValue("狀態"));
                                studentNumberList.Add("學號:"+irs.GetValue("學號"));
                            }
                        }

                        // 依班座比對
                        if (irs.Contains("班級") && irs.Contains("座號") && irs.Contains("狀態"))
                        {
                            if (Global._StudentStatusDBDict.ContainsKey(irs.GetValue("狀態")))
                            {
                                sid = Utility.GetStudentID(irs.GetValue("班級"), irs.GetValue("座號"), irs.GetValue("狀態"));
                                ClassSeatNoList.Add("班級:" + irs.GetValue("班級") + ",座號:" + irs.GetValue("座號"));
                            }
                        }

                            // 比對需要刪除
                            foreach(DAO.UDT_StudQuizDataDef data in HasQuizDataList.Where(x=>x.StudentID ==sid))
                            {
                                DelQuizDataList.Add(data);
                            }

                            DAO.UDT_StudQuizDataDef sqd = new DAO.UDT_StudQuizDataDef();
                            sqd.QuizID = int.Parse(_QuizID);
                            sqd.AuthorID = AuthorID;
                            sqd.StudentID = sid;

                            DateTime dt1, dt2;
                            if (irs.Contains("實施日期"))
                                if (DateTime.TryParse(irs.GetValue("實施日期"), out dt1))
                                    sqd.ImplementationDate = dt1;

                            if (irs.Contains("解析日期"))
                                if (DateTime.TryParse(irs.GetValue("解析日期"), out dt2))
                                    sqd.AnalysisDate = dt2;

                            List<XElement> elmList = new List<XElement>();
                            foreach (string str in _DataFieldNameList)
                            {
                                if (irs.Contains(str))
                                {
                                    XElement elm = new XElement("Item");
                                    elm.SetAttributeValue("name", str);
                                    elm.SetAttributeValue("value", irs.GetValue(str));
                                    elmList.Add(elm);
                                }
                            }
                            sqd.Content = Utility.ConvertXmlListToString1(elmList);

                            StudQuizDataList.Add(sqd);

                    }

                    if (DelQuizDataList.Count > 0)
                    {
                        List<int> intList = (from data in DelQuizDataList select data.StudentID).ToList();
                        Dictionary<int, string> studNameDict = Utility.GetConvertStringDict1fromDB(intList);

                        // 收集 Log
                        foreach (DAO.UDT_StudQuizDataDef data in DelQuizDataList)
                        {
                            if(studNameDict.ContainsKey(data.StudentID))
                            {
                                StringBuilder sb = new StringBuilder();
                                sb.AppendLine("匯入輔導測驗-刪除");
                                sb.AppendLine(studNameDict[data.StudentID]);
                                sb.AppendLine("測驗名稱:" + _QuizName);
                                if (data.ImplementationDate.HasValue)
                                    sb.AppendLine("實施日期:" + data.ImplementationDate.Value.ToShortDateString());

                                if (data.AnalysisDate.HasValue)
                                    sb.AppendLine("解析日期:" + data.AnalysisDate.Value.ToShortDateString());

                                XElement elmContent = Utility.ConvertStringToXelm1(data.Content);
                                if (elmContent != null)
                                {
                                    foreach (XElement elm in elmContent.Elements("Item"))
                                    {
                                        if (elm.Attribute("name") != null && elm.Attribute("value") != null)
                                            sb.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value);
                                    }
                                }

                                if (!Log_Delete.ContainsKey(data.StudentID))
                                    Log_Delete.Add(data.StudentID, sb);
                            }
                        }

                        _UDTTransfer.DeleteStudQuizDataLlist(DelQuizDataList);
                    }
                    if (StudQuizDataList.Count > 0)
                    {
                        List<int> intList = (from data in StudQuizDataList select data.StudentID).ToList();
                        Dictionary<int, string> studNameDict = Utility.GetConvertStringDict1fromDB(intList);

                        // 收集 Log
                        foreach (DAO.UDT_StudQuizDataDef data in StudQuizDataList)
                        {
                            if (studNameDict.ContainsKey(data.StudentID))
                            {
                                StringBuilder sb = new StringBuilder();
                                // 檢查是否有刪除,有放上面
                                if (Log_Delete.ContainsKey(data.StudentID))
                                {
                                    sb.AppendLine(Log_Delete[data.StudentID].ToString());
                                    sb.AppendLine();
                                }

                                sb.AppendLine("匯入輔導測驗-新增");
                                sb.AppendLine(studNameDict[data.StudentID]);
                                sb.AppendLine("測驗名稱:" + _QuizName);
                                if (data.ImplementationDate.HasValue)
                                    sb.AppendLine("實施日期:" + data.ImplementationDate.Value.ToShortDateString());

                                if (data.AnalysisDate.HasValue)
                                    sb.AppendLine("解析日期:" + data.AnalysisDate.Value.ToShortDateString());

                                XElement elmContent = Utility.ConvertStringToXelm1(data.Content);
                                if (elmContent != null)
                                {
                                    foreach (XElement elm in elmContent.Elements("Item"))
                                    {
                                        if (elm.Attribute("name") != null && elm.Attribute("value") != null)
                                            sb.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value);
                                    }
                                }

                                if (!Log_Insert.ContainsKey(data.StudentID))
                                    Log_Insert.Add(data.StudentID, sb);
                            }
                        }

                        _UDTTransfer.InsertStudQuizDataLlist(StudQuizDataList);
                    }

                    // log 資料
                    if (Log_Insert.Count > 0)
                    {
                        foreach (KeyValuePair<int, StringBuilder> data in Log_Insert)
                            _logTransfer.SaveLog("輔導系統-匯入測驗資料", "匯入", "student", data.Key.ToString(), data.Value);
                    }

                    // 總共
                    StringBuilder logData = new StringBuilder();
                    logData.AppendLine("測驗名稱:" + _QuizName);
                    if (ClassSeatNoList.Count > 0)
                    {
                        logData.AppendLine("--依班級座號匯入--");
                        foreach (string str in ClassSeatNoList)
                            logData.AppendLine(str);

                        logData.AppendLine("匯入學生共"+ClassSeatNoList.Count+"人");
                    }
                    if (studentNumberList.Count > 0)
                    {
                        logData.AppendLine("--依學號匯入--");
                        foreach (string str in studentNumberList)
                            logData.AppendLine(str);

                        logData.AppendLine("匯入學生共" + studentNumberList.Count + "人");
                    }
                    // 寫入 log
                    _logTransfer.SaveLog("輔導系統.匯入測驗資料", "匯入", "", "", logData);

                }
                catch(Exception ex)
                {
                    throw ex;
                }
            }
            return "";
        }
        /// <summary>
        /// 分批執行匯入
        /// </summary>
        /// <param name="Rows">IRowStream物件列表</param>
        /// <returns>分批匯入完成訊息</returns>
        public override string Import(List <IRowStream> Rows)
        {
            if (mOption.Action == ImportAction.InsertOrUpdate)
            {
                try
                {
                    // log
                    DAO.LogTransfer _logTransfer = new DAO.LogTransfer();

                    List <DAO.UDT_StudQuizDataDef> StudQuizDataList = new List <DAO.UDT_StudQuizDataDef>();
                    List <DAO.UDT_StudQuizDataDef> DelQuizDataList  = new List <DAO.UDT_StudQuizDataDef>();
                    List <DAO.UDT_StudQuizDataDef> HasQuizDataList  = new List <DAO.UDT_StudQuizDataDef>();
                    // 新增 Log
                    Dictionary <int, StringBuilder> Log_Insert = new Dictionary <int, StringBuilder> ();
                    // 刪除 Log
                    Dictionary <int, StringBuilder> Log_Delete = new Dictionary <int, StringBuilder>();


                    List <string> studentNumberList = new List <string>();
                    List <string> ClassSeatNoList   = new List <string>();

                    // 取得試別有學生資料
                    HasQuizDataList = _UDTTransfer.GetStudQuizDataByQuizID(_QuizID);
                    int    count    = 0;
                    string AuthorID = Utility.GetAuthorID();
                    foreach (IRowStream irs in Rows)
                    {
                        count++;
                        this.ImportProgress = count;
                        int sid = 0;
                        // 依學號比對
                        if (irs.Contains("學號") && irs.Contains("狀態"))
                        {
                            if (Global._StudentStatusDBDict.ContainsKey(irs.GetValue("狀態")))
                            {
                                sid = Utility.GetStudentID(irs.GetValue("學號"), irs.GetValue("狀態"));
                                studentNumberList.Add("學號:" + irs.GetValue("學號"));
                            }
                        }

                        // 依班座比對
                        if (irs.Contains("班級") && irs.Contains("座號") && irs.Contains("狀態"))
                        {
                            if (Global._StudentStatusDBDict.ContainsKey(irs.GetValue("狀態")))
                            {
                                sid = Utility.GetStudentID(irs.GetValue("班級"), irs.GetValue("座號"), irs.GetValue("狀態"));
                                ClassSeatNoList.Add("班級:" + irs.GetValue("班級") + ",座號:" + irs.GetValue("座號"));
                            }
                        }

                        // 比對需要刪除
                        foreach (DAO.UDT_StudQuizDataDef data in HasQuizDataList.Where(x => x.StudentID == sid))
                        {
                            DelQuizDataList.Add(data);
                        }



                        DAO.UDT_StudQuizDataDef sqd = new DAO.UDT_StudQuizDataDef();
                        sqd.QuizID    = int.Parse(_QuizID);
                        sqd.AuthorID  = AuthorID;
                        sqd.StudentID = sid;

                        DateTime dt1, dt2;
                        if (irs.Contains("實施日期"))
                        {
                            if (DateTime.TryParse(irs.GetValue("實施日期"), out dt1))
                            {
                                sqd.ImplementationDate = dt1;
                            }
                        }

                        if (irs.Contains("解析日期"))
                        {
                            if (DateTime.TryParse(irs.GetValue("解析日期"), out dt2))
                            {
                                sqd.AnalysisDate = dt2;
                            }
                        }

                        List <XElement> elmList = new List <XElement>();
                        foreach (string str in _DataFieldNameList)
                        {
                            if (irs.Contains(str))
                            {
                                XElement elm = new XElement("Item");
                                elm.SetAttributeValue("name", str);
                                elm.SetAttributeValue("value", irs.GetValue(str));
                                elmList.Add(elm);
                            }
                        }
                        sqd.Content = Utility.ConvertXmlListToString1(elmList);

                        StudQuizDataList.Add(sqd);
                    }

                    if (DelQuizDataList.Count > 0)
                    {
                        List <int> intList = (from data in DelQuizDataList select data.StudentID).ToList();
                        Dictionary <int, string> studNameDict = Utility.GetConvertStringDict1fromDB(intList);

                        // 收集 Log
                        foreach (DAO.UDT_StudQuizDataDef data in DelQuizDataList)
                        {
                            if (studNameDict.ContainsKey(data.StudentID))
                            {
                                StringBuilder sb = new StringBuilder();
                                sb.AppendLine("匯入輔導測驗-刪除");
                                sb.AppendLine(studNameDict[data.StudentID]);
                                sb.AppendLine("測驗名稱:" + _QuizName);
                                if (data.ImplementationDate.HasValue)
                                {
                                    sb.AppendLine("實施日期:" + data.ImplementationDate.Value.ToShortDateString());
                                }

                                if (data.AnalysisDate.HasValue)
                                {
                                    sb.AppendLine("解析日期:" + data.AnalysisDate.Value.ToShortDateString());
                                }

                                XElement elmContent = Utility.ConvertStringToXelm1(data.Content);
                                if (elmContent != null)
                                {
                                    foreach (XElement elm in elmContent.Elements("Item"))
                                    {
                                        if (elm.Attribute("name") != null && elm.Attribute("value") != null)
                                        {
                                            sb.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value);
                                        }
                                    }
                                }

                                if (!Log_Delete.ContainsKey(data.StudentID))
                                {
                                    Log_Delete.Add(data.StudentID, sb);
                                }
                            }
                        }

                        _UDTTransfer.DeleteStudQuizDataLlist(DelQuizDataList);
                    }
                    if (StudQuizDataList.Count > 0)
                    {
                        List <int> intList = (from data in StudQuizDataList select data.StudentID).ToList();
                        Dictionary <int, string> studNameDict = Utility.GetConvertStringDict1fromDB(intList);

                        // 收集 Log
                        foreach (DAO.UDT_StudQuizDataDef data in StudQuizDataList)
                        {
                            if (studNameDict.ContainsKey(data.StudentID))
                            {
                                StringBuilder sb = new StringBuilder();
                                // 檢查是否有刪除,有放上面
                                if (Log_Delete.ContainsKey(data.StudentID))
                                {
                                    sb.AppendLine(Log_Delete[data.StudentID].ToString());
                                    sb.AppendLine();
                                }

                                sb.AppendLine("匯入輔導測驗-新增");
                                sb.AppendLine(studNameDict[data.StudentID]);
                                sb.AppendLine("測驗名稱:" + _QuizName);
                                if (data.ImplementationDate.HasValue)
                                {
                                    sb.AppendLine("實施日期:" + data.ImplementationDate.Value.ToShortDateString());
                                }

                                if (data.AnalysisDate.HasValue)
                                {
                                    sb.AppendLine("解析日期:" + data.AnalysisDate.Value.ToShortDateString());
                                }

                                XElement elmContent = Utility.ConvertStringToXelm1(data.Content);
                                if (elmContent != null)
                                {
                                    foreach (XElement elm in elmContent.Elements("Item"))
                                    {
                                        if (elm.Attribute("name") != null && elm.Attribute("value") != null)
                                        {
                                            sb.AppendLine("項目名稱:" + elm.Attribute("name").Value + " , 測驗結果:" + elm.Attribute("value").Value);
                                        }
                                    }
                                }

                                if (!Log_Insert.ContainsKey(data.StudentID))
                                {
                                    Log_Insert.Add(data.StudentID, sb);
                                }
                            }
                        }

                        _UDTTransfer.InsertStudQuizDataLlist(StudQuizDataList);
                    }

                    // log 資料
                    if (Log_Insert.Count > 0)
                    {
                        foreach (KeyValuePair <int, StringBuilder> data in Log_Insert)
                        {
                            _logTransfer.SaveLog("輔導系統-匯入測驗資料", "匯入", "student", data.Key.ToString(), data.Value);
                        }
                    }

                    // 總共
                    StringBuilder logData = new StringBuilder();
                    logData.AppendLine("測驗名稱:" + _QuizName);
                    if (ClassSeatNoList.Count > 0)
                    {
                        logData.AppendLine("--依班級座號匯入--");
                        foreach (string str in ClassSeatNoList)
                        {
                            logData.AppendLine(str);
                        }

                        logData.AppendLine("匯入學生共" + ClassSeatNoList.Count + "人");
                    }
                    if (studentNumberList.Count > 0)
                    {
                        logData.AppendLine("--依學號匯入--");
                        foreach (string str in studentNumberList)
                        {
                            logData.AppendLine(str);
                        }

                        logData.AppendLine("匯入學生共" + studentNumberList.Count + "人");
                    }
                    // 寫入 log
                    _logTransfer.SaveLog("輔導系統.匯入測驗資料", "匯入", "", "", logData);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            return("");
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(cbxQuizName.Text))
            {
                FISCA.Presentation.Controls.MsgBox.Show("請選擇測驗名稱.");
                return;
            }

            if (dtAnalysisDate.IsEmpty)
            {
                FISCA.Presentation.Controls.MsgBox.Show("請輸入解析日期.");
                return;
            }

            if (dtImplementationDate.IsEmpty)
            {
                FISCA.Presentation.Controls.MsgBox.Show("請輸入實施日期.");
                return;
            }

            foreach (DataGridViewRow dr in dgQuizData.Rows)
            {
                int errCot = 0;

                if (dr.Cells[colDataField.Index].ErrorText != "")
                {
                    errCot++;
                }

                if (errCot > 0)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("資料有錯誤無法儲存.");
                    return;
                }
            }

            LogData();

            if (_StudQuizData == null)
            {
                _StudQuizData = new DAO.UDT_StudQuizDataDef();
            }

            _StudQuizData.StudentID = int.Parse(_StudentID);

            _StudQuizData.ImplementationDate = dtImplementationDate.Value;
            _StudQuizData.AnalysisDate       = dtAnalysisDate.Value;

            List <XElement> xmlList = new List <XElement>();

            foreach (DataGridViewRow dgvr in dgQuizData.Rows)
            {
                if (dgvr.IsNewRow)
                {
                    continue;
                }
                XElement elm = new XElement("Item");

                if (dgvr.Cells[colDataField.Index].Value != null)
                {
                    elm.SetAttributeValue("name", dgvr.Cells[colDataField.Index].Value.ToString());
                }
                if (dgvr.Cells[colDataValue.Index].Value != null)
                {
                    elm.SetAttributeValue("value", dgvr.Cells[colDataValue.Index].Value.ToString());
                }
                xmlList.Add(elm);
            }
            _StudQuizData.Content = Utility.ConvertXmlListToString1(xmlList);
            if (_EditMode == EditMode.Edit)
            {
                _UDTTransfer.UpdateStudQuizData(_StudQuizData);
                // log
                _LogTransfer.SaveChangeLog("學生.輔導測驗相關-修改", "修改", _LogStudentName + ",修改測驗名稱:" + cbxQuizName.Text + "\n", "", "student", _StudentID);
            }
            else
            {
                // 取得所選測驗ID
                foreach (DAO.UDT_QuizDef data in _AllQuiz.Where(x => x.QuizName == cbxQuizName.Text))
                {
                    _StudQuizData.QuizID = int.Parse(data.UID);
                }


                // 檢查學生測驗是否有名稱id
                if (_StudQuizData.QuizID < 1)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("測驗名稱無法對應.");
                    return;
                }

                bool pass = true;
                // 檢查學生測驗資料是否有相同:測驗名稱
                if (_StudQuizDataList == null)
                {
                    _StudQuizDataList = new List <DAO.UDT_StudQuizDataDef>();
                }

                foreach (DAO.UDT_StudQuizDataDef data in _StudQuizDataList.Where(x => x.QuizID == _StudQuizData.QuizID))
                {
                    pass = false;
                }

                if (pass == false)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("已有相同測驗名稱無法新增.");
                    return;
                }

                if (pass)
                {
                    _UDTTransfer.InsertStudQuizData(_StudQuizData);
                    _LogTransfer.SaveInsertLog("學生.輔導相關測驗-新增", "新增", _LogStudentName + ",新增測驗名稱:" + cbxQuizName.Text + "\n", "", "student", _StudentID);
                }
            }

            _LogTransfer.Clear();
            LogData();
            this.Close();
        }
        private void StudQuizDataForm_Load(object sender, EventArgs e)
        {
            // 取得學生資料
            StudentRecord studRec = Student.SelectByID(_StudentID);

            _StudQuizDataList = _UDTTransfer.GetStudQuizDataByStudentID(studRec.ID);

            // log 學生資訊用
            _LogStudentName = Utility.ConvertString1(studRec);


            if (_StudQuizData == null)
            {
                _StudQuizData = new DAO.UDT_StudQuizDataDef();
            }

            if (_EditMode == EditMode.Edit)
            {
                // 取得測驗名稱
                foreach (DAO.UDT_QuizDef data in _AllQuiz.Where(x => x.UID == _StudQuizData.QuizID.ToString()))
                {
                    _qdd = data;
                }

                if (_qdd == null)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("無法解析測驗內容.");
                    return;
                }
            }

            if (studRec != null)
            {
                string str = "";
                if (studRec.Class != null)
                {
                    str += studRec.Class.Name + " ";
                }

                str += studRec.Name + " ";
                str += studRec.StudentNumber;
                str  = " (" + str + ")";
                if (_EditMode == EditMode.Edit)
                {
                    this.Text = _qdd.QuizName + str;
                }
                else
                {
                    this.Text = str;
                }
            }

            // 當編輯模式,測驗名稱,不能修改
            if (_EditMode == EditMode.Edit)
            {
                cbxQuizName.Text    = _qdd.QuizName;
                cbxQuizName.Enabled = false;

                if (_StudQuizData.ImplementationDate.HasValue)
                {
                    dtImplementationDate.Value = _StudQuizData.ImplementationDate.Value;
                }

                if (_StudQuizData.AnalysisDate.HasValue)
                {
                    dtAnalysisDate.Value = _StudQuizData.AnalysisDate.Value;
                }

                dgQuizData.Rows.Clear();

                int rowIdx = 0;
                dgQuizData.Columns[colDataField.Index].ReadOnly = false;

                XElement elmContent = Utility.ConvertStringToXelm1(_StudQuizData.Content);
                if (elmContent != null)
                {
                    // 沒有在試別欄位加入
                    List <string> fieldList = (from data in elmContent.Elements("Item") select data.Attribute("name").Value).ToList();
                    foreach (string str in fieldList)
                    {
                        if (!_RowNameList.Contains(str))
                        {
                            _RowNameList.Add(str);
                        }
                    }
                    // 依試別欄位順序排序
                    foreach (string str in _RowNameList)
                    {
                        foreach (XElement elm in elmContent.Elements("Item").Where(x => x.Attribute("name").Value == str))
                        {
                            rowIdx = dgQuizData.Rows.Add();
                            if (elm.Attribute("name") != null)
                            {
                                dgQuizData.Rows[rowIdx].Cells[colDataField.Index].Value = elm.Attribute("name").Value;
                            }
                            if (elm.Attribute("value") != null)
                            {
                                dgQuizData.Rows[rowIdx].Cells[colDataValue.Index].Value = elm.Attribute("value").Value;
                            }
                        }
                    }
                }
                dgQuizData.Columns[colDataField.Index].ReadOnly = true;
            }
            _LogTransfer.Clear();
            LogData();
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(cbxQuizName.Text))
            {
                FISCA.Presentation.Controls.MsgBox.Show("請選擇測驗名稱.");
                return;
            }

            if (dtAnalysisDate.IsEmpty)
            {
                FISCA.Presentation.Controls.MsgBox.Show("請輸入解析日期.");
                return;
            }

            if (dtImplementationDate.IsEmpty)
            {
                FISCA.Presentation.Controls.MsgBox.Show("請輸入實施日期.");
                return;
            }

            foreach (DataGridViewRow dr in dgQuizData.Rows)
            {
                int errCot = 0;

                if (dr.Cells[colDataField.Index].ErrorText != "")
                    errCot++;

                if (errCot > 0)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("資料有錯誤無法儲存.");
                    return;
                }
            }

            LogData();

            if (_StudQuizData == null)
                _StudQuizData = new DAO.UDT_StudQuizDataDef();

            _StudQuizData.StudentID = int.Parse(_StudentID);

            _StudQuizData.ImplementationDate = dtImplementationDate.Value;
            _StudQuizData.AnalysisDate = dtAnalysisDate.Value;

            List<XElement> xmlList = new List<XElement>();
            foreach (DataGridViewRow dgvr in dgQuizData.Rows)
            {
                if (dgvr.IsNewRow)
                    continue;
                XElement elm = new XElement("Item");

                if(dgvr.Cells[colDataField.Index].Value !=null )
                    elm.SetAttributeValue("name", dgvr.Cells[colDataField.Index].Value.ToString());
                if (dgvr.Cells[colDataValue.Index].Value != null)
                    elm.SetAttributeValue("value", dgvr.Cells[colDataValue.Index].Value.ToString());
                xmlList.Add(elm);
            }
            _StudQuizData.Content = Utility.ConvertXmlListToString1(xmlList);
            if (_EditMode == EditMode.Edit)
            {
                _UDTTransfer.UpdateStudQuizData(_StudQuizData);
                // log
                _LogTransfer.SaveChangeLog("學生.輔導測驗相關-修改", "修改",_LogStudentName+",修改測驗名稱:"+cbxQuizName.Text+"\n", "", "student",_StudentID);
            }
            else
            {
                // 取得所選測驗ID
                foreach (DAO.UDT_QuizDef data in _AllQuiz.Where(x => x.QuizName == cbxQuizName.Text))
                    _StudQuizData.QuizID = int.Parse(data.UID);

                // 檢查學生測驗是否有名稱id
                if (_StudQuizData.QuizID < 1)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("測驗名稱無法對應.");
                    return;
                }

                bool pass = true;
                // 檢查學生測驗資料是否有相同:測驗名稱
                if (_StudQuizDataList == null)
                    _StudQuizDataList = new List<DAO.UDT_StudQuizDataDef>();

                foreach (DAO.UDT_StudQuizDataDef data in _StudQuizDataList.Where(x => x.QuizID == _StudQuizData.QuizID))
                        pass = false;

                if (pass == false)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("已有相同測驗名稱無法新增.");
                    return;
                }

                if (pass)
                {

                    _UDTTransfer.InsertStudQuizData(_StudQuizData);
                    _LogTransfer.SaveInsertLog("學生.輔導相關測驗-新增", "新增",_LogStudentName+",新增測驗名稱:"+cbxQuizName.Text+"\n","", "student", _StudentID);
                }
            }

            _LogTransfer.Clear();
            LogData();
            this.Close();
        }
        private void StudQuizDataForm_Load(object sender, EventArgs e)
        {
            // 取得學生資料
            StudentRecord studRec = Student.SelectByID(_StudentID);
            _StudQuizDataList = _UDTTransfer.GetStudQuizDataByStudentID(studRec.ID);

            // log 學生資訊用
            _LogStudentName = Utility.ConvertString1(studRec);

            if (_StudQuizData == null)
            {
                _StudQuizData = new DAO.UDT_StudQuizDataDef();

            }

            if (_EditMode == EditMode.Edit)
            {
                // 取得測驗名稱
                foreach (DAO.UDT_QuizDef data in _AllQuiz.Where(x => x.UID == _StudQuizData.QuizID.ToString()))
                    _qdd = data;

                if (_qdd == null)
                {
                    FISCA.Presentation.Controls.MsgBox.Show("無法解析測驗內容.");
                    return;
                }
            }

            if (studRec != null)
            {
                string str = "";
                if(studRec.Class !=null )
                    str+=studRec.Class.Name+" ";

                str+=studRec.Name+" ";
                str += studRec.StudentNumber;
                str = " (" + str + ")";
                if (_EditMode == EditMode.Edit)
                    this.Text = _qdd.QuizName + str;
                else
                    this.Text = str;
            }

            // 當編輯模式,測驗名稱,不能修改
            if (_EditMode == EditMode.Edit)
            {
                cbxQuizName.Text = _qdd.QuizName;
                cbxQuizName.Enabled = false;

                if (_StudQuizData.ImplementationDate.HasValue)
                    dtImplementationDate.Value = _StudQuizData.ImplementationDate.Value;

                if (_StudQuizData.AnalysisDate.HasValue)
                    dtAnalysisDate.Value = _StudQuizData.AnalysisDate.Value;

                dgQuizData.Rows.Clear();

                int rowIdx = 0;
                dgQuizData.Columns[colDataField.Index].ReadOnly = false;

                XElement elmContent = Utility.ConvertStringToXelm1(_StudQuizData.Content);
                if (elmContent != null)
                {
                    // 沒有在試別欄位加入
                    List<string> fieldList = (from data in elmContent.Elements("Item") select data.Attribute("name").Value).ToList();
                    foreach (string str in fieldList)
                        if (!_RowNameList.Contains(str))
                            _RowNameList.Add(str);
                    // 依試別欄位順序排序
                    foreach (string str in _RowNameList)
                    {
                        foreach (XElement elm in elmContent.Elements("Item").Where(x => x.Attribute("name").Value == str))
                        {
                            rowIdx = dgQuizData.Rows.Add();
                            if (elm.Attribute("name") != null)
                                dgQuizData.Rows[rowIdx].Cells[colDataField.Index].Value = elm.Attribute("name").Value;
                            if (elm.Attribute("value") != null)
                                dgQuizData.Rows[rowIdx].Cells[colDataValue.Index].Value = elm.Attribute("value").Value;
                        }
                    }
                }
                dgQuizData.Columns[colDataField.Index].ReadOnly = true;
            }
            _LogTransfer.Clear();
            LogData();
        }