void _bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            _bgWorker.ReportProgress(1);
            // 讀取資料
            _StudentCourseScoreBaseList = QueryData.GetStudentClassBase(_SchoolYear, _Semester, _SelGradeYear);
            _bgWorker.ReportProgress(30);
            _dt.Clear();
            _dt.Columns.Clear();
            // 建立DataTable 欄位名稱
            _dt.Columns.Add("年級");
            _dt.Columns.Add("學號");
            _dt.Columns.Add("班級");
            _dt.Columns.Add("座號");
            _dt.Columns.Add("姓名");
            _dt.Columns.Add("課程名稱");
            _dt.Columns.Add("授課教師");
            _dt.Columns.Add("課程成績");
            // 動態欄位
            QueryData._StudentExamName.Sort();
            foreach (string name in QueryData._StudentExamName)
            {
                _dt.Columns.Add(name);
            }

            _bgWorker.ReportProgress(50);
            // 填入資料
            foreach (StudentCourseScoreBase scsb in _StudentCourseScoreBaseList)
            {
                foreach (KeyValuePair <string, string> courseName in scsb.CourseNameDict)
                {
                    DataRow row = _dt.NewRow();
                    row["年級"]   = scsb.GradeYear;
                    row["學號"]   = scsb.StudentNumber;
                    row["班級"]   = scsb.ClassName;
                    row["座號"]   = scsb.SeatNo;
                    row["姓名"]   = scsb.Name;
                    row["課程名稱"] = courseName.Value;
                    if (scsb.CourseTeacherDict.ContainsKey(courseName.Key))
                    {
                        row["授課教師"] = scsb.CourseTeacherDict[courseName.Key];
                    }

                    if (scsb.CousreScoreDict.ContainsKey(courseName.Key))
                    {
                        row["課程成績"] = scsb.CousreScoreDict[courseName.Key];
                    }

                    if (scsb.ExamScoreDict.ContainsKey(courseName.Key))
                    {
                        foreach (KeyValuePair <string, decimal> exScore in scsb.ExamScoreDict[courseName.Key])
                        {
                            row[exScore.Key] = exScore.Value;
                        }
                    }
                    _dt.Rows.Add(row);
                }
            }
            _bgWorker.ReportProgress(90);
        }