private void Save_Click(object sender, EventArgs e)
        {
            try
            {
                if (!this.ValidateData())
                {
                    MessageBox.Show("請先修正錯誤再儲存。");
                    this.DialogResult = System.Windows.Forms.DialogResult.None;
                    return;
                }
                List<UDT.GradeScoreMappingTable> GradeScoreMappings = __Access.Select<UDT.GradeScoreMappingTable>();
                GradeScoreMappings.ForEach(x => x.Deleted = true);
                GradeScoreMappings.SaveAll();
                GradeScoreMappings.Clear();
                foreach (DataGridViewRow row in this.dgvData.Rows)
                {
                    if (row.IsNewRow)
                        continue;

                    UDT.GradeScoreMappingTable GradeScoreMappingTable = new UDT.GradeScoreMappingTable();

                    GradeScoreMappingTable.Grade = (row.Cells[0].Value + "").Trim();
                    GradeScoreMappingTable.GP = decimal.Parse(row.Cells[1].Value + "");
                    GradeScoreMappingTable.Score = decimal.Parse(row.Cells[2].Value + "");

                    GradeScoreMappings.Add(GradeScoreMappingTable);
                }
                GradeScoreMappings.SaveAll();
                MessageBox.Show("儲存成功。");
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                this.DialogResult = System.Windows.Forms.DialogResult.None;
            }
        }
        private void Subject_Score_Export_DBF_Load(object sender, EventArgs e)
        {
            this.circularProgress.Visible = false;
            this.circularProgress.IsRunning = false;
            this.form_loaded = false;

            Task task = Task.Factory.StartNew(() =>
            {
                List<UDT.GradeScoreMappingTable> GradeScoreMappings = __Access.Select<UDT.GradeScoreMappingTable>();

                if (GradeScoreMappings.Count == 0)
                {
                    XDocument xDocument = XDocument.Parse(Properties.Resources.GradeScoreMappingTable, LoadOptions.None);
                    IEnumerable<XElement> xElements = xDocument.Descendants("Grade");
                    foreach (XElement xElement in xElements)
                    {
                        UDT.GradeScoreMappingTable GradeScoreMappingTable = new UDT.GradeScoreMappingTable();

                        GradeScoreMappingTable.Grade = xElement.Value;
                        GradeScoreMappingTable.GP = decimal.Parse(xElement.Attribute("GP").Value);
                        GradeScoreMappingTable.Score = decimal.Parse(xElement.Attribute("Score").Value);

                        GradeScoreMappings.Add(GradeScoreMappingTable);
                    }
                    GradeScoreMappings.SaveAll();
                }
                foreach (UDT.GradeScoreMappingTable GradeScoreMappingTable in GradeScoreMappings)
                {
                    if (!this.dicGradeScoreMappings.ContainsKey(GradeScoreMappingTable.Grade))
                        this.dicGradeScoreMappings.Add(GradeScoreMappingTable.Grade, new KeyValuePair<string, string>(GradeScoreMappingTable.GP.ToString(), GradeScoreMappingTable.Score.ToString()));
                }
            });
            task.ContinueWith((x) =>
            {
                if (x.Exception != null)
                {
                    MessageBox.Show(x.Exception.InnerException.Message);
                }
                this.circularProgress.IsRunning = false;
                this.circularProgress.Visible = false;
                this.form_loaded = true;
            }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
        }