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); }