private void cbxQuizName_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (DAO.UDT_QuizDef data in _AllQuiz.Where(x => x.QuizName == cbxQuizName.Text))
            {
                _qdd = data;
            }

            ReLoadQuizFieldNameList();

            dgQuizData.Rows.Clear();

            int rowIdx = 0;

            dgQuizData.Columns[colDataField.Index].ReadOnly = false;

            // 依試別欄位順序排序
            foreach (DAO.SortData1 data in _quizFieldNameList)
            {
                rowIdx = dgQuizData.Rows.Add();
                dgQuizData.Rows[rowIdx].Cells[colDataField.Index].Value = data.Name;
            }

            dgQuizData.Columns[colDataField.Index].ReadOnly = true;
            _LogTransfer.Clear();
            LogData();
        }
        void btnItem_Click(object sender, EventArgs e)
        {
            if (itmPnlQuizName.SelectedItems.Count == 1)
            {
                txtQuizName.Enabled = true;
                ButtonItem selItem = itmPnlQuizName.SelectedItems[0] as ButtonItem;
                if (selItem != null)
                {
                    txtQuizName.Text = selItem.Name;
                    _selQuizName     = selItem.Name;
                    dgDataField.Rows.Clear();
                    int             RowIdx   = 0;
                    DAO.UDT_QuizDef qd1      = selItem.Tag as DAO.UDT_QuizDef;
                    List <string>   itemList = new List <string>();
                    if (qd1 != null)
                    {
                        XElement elms = Utility.ConvertStringToXelm1(qd1.QuizDataField);
                        if (elms != null)
                        {
                            foreach (XElement elm in elms.Elements("Field"))
                            {
                                RowIdx = dgDataField.Rows.Add();
                                if (elm.Attribute("name") != null)
                                {
                                    dgDataField.Rows[RowIdx].Cells[colFieldName.Index].Value = elm.Attribute("name").Value;
                                    itemList.Add(elm.Attribute("name").Value);
                                }

                                if (elm.Attribute("order") != null)
                                {
                                    dgDataField.Rows[RowIdx].Cells[colDisplayOrder.Index].Value = elm.Attribute("order").Value;
                                }
                            }
                        }
                    }

                    _LogTransfer.Clear();
                    _LogTransfer.SetLogValue("測驗名稱", qd1.QuizName);
                    _LogTransfer.SetLogValue("項目內容", string.Join(",", itemList.ToArray()));
                }
                else
                {
                    txtQuizName.Text = "";
                    dgDataField.Rows.Clear();
                }
            }
        }
        private void LoadDataToListView()
        {
            this.Loading = false;
            lvStudQuizData.Items.Clear();
            ListViewItem lvi = null;

            _lviList.Clear();
            foreach (DAO.UDT_StudQuizDataDef sqd in _StudQuizDataList)
            {
                lvi     = new ListViewItem();
                lvi.Tag = sqd;
                DAO.UDT_QuizDef qd = _UDTTransfer.GetQuizDataByID(sqd.QuizID.ToString());
                lvi.Text = qd.QuizName;
                if (sqd.ImplementationDate.HasValue)
                {
                    lvi.SubItems.Add(sqd.ImplementationDate.Value.ToShortDateString());
                }
                else
                {
                    lvi.SubItems.Add("");
                }
                if (sqd.AnalysisDate.HasValue)
                {
                    lvi.SubItems.Add(sqd.AnalysisDate.Value.ToShortDateString());
                }
                else
                {
                    lvi.SubItems.Add("");
                }

                //lvStudQuizData.Items.Add(lvi);
                _lviList.Add(lvi);
            }

            // sort by ImplementationDate descending
            _lviList = (from data in _lviList orderby data.SubItems[colImplementationDate.Index].Text descending select data).ToList();
            lvStudQuizData.Items.AddRange(_lviList.ToArray());
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            List <string> NameList = _QuizData.Select(x => x.QuizName).ToList();

            AddQuizNameForm aqnf = new AddQuizNameForm(NameList);

            if (aqnf.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
            {
                if (!string.IsNullOrEmpty(aqnf.GetAddQuizName()))
                {
                    DAO.UDT_QuizDef qd = new DAO.UDT_QuizDef();
                    qd.QuizName = aqnf.GetAddQuizName();
                    // Log
                    _LogTransfer.Clear();
                    _LogTransfer.SetLogValue("測驗名稱", "");
                    _LogTransfer.SetLogValue("測驗名稱", qd.QuizName);
                    _LogTransfer.SaveInsertLog("輔導新增測驗名稱", "新增", "", "", "", "");

                    _UDTTransfer.InsertQuizData(qd);
                }
            }
            LoadData();
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            List<string> NameList = _QuizData.Select(x => x.QuizName).ToList();

            AddQuizNameForm aqnf = new AddQuizNameForm(NameList);

            if (aqnf.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
            {
                if (!string.IsNullOrEmpty(aqnf.GetAddQuizName()))
                {
                    DAO.UDT_QuizDef qd = new DAO.UDT_QuizDef();
                    qd.QuizName = aqnf.GetAddQuizName();
                    // Log
                    _LogTransfer.Clear();
                    _LogTransfer.SetLogValue("測驗名稱","");
                    _LogTransfer.SetLogValue("測驗名稱", qd.QuizName);
                    _LogTransfer.SaveInsertLog("輔導新增測驗名稱", "新增", "", "", "", "");

                    _UDTTransfer.InsertQuizData(qd);

                }
            }
            LoadData();
        }
        private void btnDel_Click(object sender, EventArgs e)
        {
            if (itmPnlQuizName.SelectedItems.Count == 1)
            {
                ButtonItem selItm = itmPnlQuizName.SelectedItems[0] as ButtonItem;
                if (selItm != null)
                {
                    if (FISCA.Presentation.Controls.MsgBox.Show("請問確定刪除[" + selItm.Name + "]?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.Yes)
                    {
                        DAO.UDT_QuizDef data = itmPnlQuizName.SelectedItems[0].Tag as DAO.UDT_QuizDef;

                        string        itemName = "";
                        List <string> itemList = (from da in Utility.ConvertStringToXelm1(data.QuizDataField).Elements("Field") select da.Attribute("name").Value).ToList();
                        itemName += string.Join(",", itemList.ToArray());
                        _LogTransfer.SetLogValue("測驗名稱", data.QuizName);
                        _LogTransfer.SetLogValue("項目內容", itemName);
                        _LogTransfer.SaveDeleteLog("輔導刪除測驗", "刪除", "", "", "", "");

                        _UDTTransfer.DeleteQuizData(data);
                        LoadData();
                    }
                }
            }
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            // 檢查資料是否又誤
            if (itmPnlQuizName.SelectedItems.Count < 1)
            {
                FISCA.Presentation.Controls.MsgBox.Show("請選擇測驗.");
                return;
            }

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

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

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

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


            // 有修改名稱
            if (txtQuizName.Text.Trim() != _selQuizName)
            {
                if (_QuizData.Select(x => x.QuizName).Contains(txtQuizName.Text.Trim()))
                {
                    FISCA.Presentation.Controls.MsgBox.Show("已有相同名稱,無法修改!");
                    return;
                }
            }

            // 儲存資料
            if (itmPnlQuizName.SelectedItems.Count == 1)
            {
                ButtonItem      selItem = itmPnlQuizName.SelectedItems[0] as ButtonItem;
                DAO.UDT_QuizDef qd1     = selItem.Tag as DAO.UDT_QuizDef;

                if (selItem != null && qd1 != null)
                {
                    qd1.QuizName = txtQuizName.Text.Trim();

                    List <XElement> xmlList  = new List <XElement>();
                    List <string>   itemList = new List <string>();
                    foreach (DataGridViewRow dgvr in dgDataField.Rows)
                    {
                        if (dgvr.IsNewRow)
                        {
                            continue;
                        }
                        if (("" + dgvr.Cells[colFieldName.Index].Value).Trim() == "")
                        {
                            continue;
                        }

                        XElement elm = new XElement("Field");
                        if (dgvr.Cells[colFieldName.Index].Value != null)
                        {
                            elm.SetAttributeValue("name", dgvr.Cells[colFieldName.Index].Value.ToString());
                            itemList.Add(dgvr.Cells[colFieldName.Index].Value.ToString());
                        }

                        if (dgvr.Cells[colDisplayOrder.Index].Value != null)
                        {
                            elm.SetAttributeValue("order", dgvr.Cells[colDisplayOrder.Index].Value.ToString());
                        }

                        xmlList.Add(elm);
                    }
                    _LogTransfer.SetLogValue("測驗名稱", txtQuizName.Text);
                    _LogTransfer.SetLogValue("項目內容", string.Join(",", itemList.ToArray()));

                    qd1.QuizDataField = Utility.ConvertXmlListToString1(xmlList);

                    if (string.IsNullOrEmpty(qd1.UID))
                    {
                        _LogTransfer.SaveInsertLog("輔導新增測驗", "新增", "", "", "", "");

                        _UDTTransfer.InsertQuizData(qd1);
                    }
                    else
                    {
                        _LogTransfer.SaveInsertLog("輔導修改測驗", "修改", "", "", "", "");
                        _UDTTransfer.UpdateQuizData(qd1);
                    }
                }
            }
            FISCA.Presentation.Controls.MsgBox.Show("儲存完成.");

            LoadData();
        }
        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 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 cbxQuizName_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (DAO.UDT_QuizDef data in _AllQuiz.Where(x => x.QuizName == cbxQuizName.Text))
                _qdd = data;

            ReLoadQuizFieldNameList();

            dgQuizData.Rows.Clear();

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

                // 依試別欄位順序排序
                foreach (DAO.SortData1 data in _quizFieldNameList)
                {
                    rowIdx = dgQuizData.Rows.Add();
                    dgQuizData.Rows[rowIdx].Cells[colDataField.Index].Value = data.Name;
                }

            dgQuizData.Columns[colDataField.Index].ReadOnly = true;
            _LogTransfer.Clear();
            LogData();
        }