private void btnInBangDiem_Click(object sender, EventArgs e)
        {
            if (grvLichSu.FocusedRowHandle < 0)
            {
                ThongBao("Bạn chưa chọn lần nhập lại điểm nào !");
                return;
            }

            // Lấy danh sách sinh viên
            dtSinhVien = CreateTable();
            AddBand();
            XuLyTable((int)grvLichSu.GetDataRow(grvLichSu.FocusedRowHandle)["KQHT_ChoNhapLaiDiemID"]);

            if (dtSinhVien.Rows.Count <= 0)
            {
                ThongBao("Không có dữ liệu để in báo cáo !");
                return;
            }

            DataTable dtMain = oBKQHT_DiemThanhPhan.CreateTableReportMain();
            DataRow   dr     = dtMain.NewRow();

            dr["TenMonHoc"] = drMonHoc["TenMonHoc"];
            dr["TenLop"]    = pDM_LopInfo.TenLop.Replace("Lớp: ", "");
            dr["HocKy"]     = Program.HocKy;
            dr["NamHoc"]    = Program.NamHoc;
            dr["SoTiet"]    = drMonHoc["SoTiet"];

            #region Tổng hợp Xếp loại
            // Đưa dữ liệu phần tỷ lệ kết quả học tập
            DataTable              dtXepLoai;
            cBKQHT_XepLoaiMonHoc   oBKQHT_XepLoaiMonHoc    = new cBKQHT_XepLoaiMonHoc();
            KQHT_XepLoaiMonHocInfo pKQHT_XepLoaiMonHocInfo = new KQHT_XepLoaiMonHocInfo();
            int SoSinhVien;

            dtXepLoai = oBKQHT_XepLoaiMonHoc.Get(pKQHT_XepLoaiMonHocInfo);
            //dr = dtMain.NewRow();
            SoSinhVien = dtSinhVien.Rows.Count;
            // Tỷ lệ giỏi
            string    Condition = "";
            int       SoLuong   = 0;
            DataRow[] ArrDr     = dtXepLoai.Select("MaXepLoai = 'G'");
            if (ArrDr.Length > 0)
            {
                Condition = "IDKQHT_XepLoai_1 = " + ArrDr[0]["KQHT_XepLoaiMonHocID"];
                //foreach (DataRow drXL in ArrDr)
                //{
                //    Condition += (Condition == "" ? "" : " OR ") + "IDKQHT_XepLoai_1 = " + drXL["KQHT_XepLoaiMonHocID"];
                //}

                SoLuong        = int.Parse(dtSinhVien.Compute("Count(SV_SinhVienID)", Condition).ToString());
                dr["LoaiGioi"] = TinhPhanTram(SoLuong, SoSinhVien);
            }

            // Tỷ lệ khá
            ArrDr = dtXepLoai.Select("MaXepLoai = 'K'");
            if (ArrDr.Length > 0)
            {
                Condition = "IDKQHT_XepLoai_1 = " + ArrDr[0]["KQHT_XepLoaiMonHocID"];
                //foreach (DataRow drXL in ArrDr)
                //{
                //    Condition += (Condition == "" ? "" : " OR ") + "IDKQHT_XepLoai_1 = " + drXL["KQHT_XepLoaiMonHocID"];
                //}

                SoLuong       = int.Parse(dtSinhVien.Compute("Count(SV_SinhVienID)", Condition).ToString());
                dr["LoaiKha"] = TinhPhanTram(SoLuong, SoSinhVien);
            }
            // Tỷ lệ trung bình
            ArrDr = dtXepLoai.Select("MaXepLoai = 'TB'");
            if (ArrDr.Length > 0)
            {
                Condition = "IDKQHT_XepLoai_1 = " + ArrDr[0]["KQHT_XepLoaiMonHocID"];
                //foreach (DataRow drXL in ArrDr)
                //{
                //    Condition += (Condition == "" ? "" : " OR ") + "IDKQHT_XepLoai_1 = " + drXL["KQHT_XepLoaiMonHocID"];
                //}

                SoLuong             = int.Parse(dtSinhVien.Compute("Count(SV_SinhVienID)", Condition).ToString());
                dr["LoaiTrungBinh"] = TinhPhanTram(SoLuong, SoSinhVien);
            }
            // Tỷ lệ yếu
            ArrDr = dtXepLoai.Select("MaXepLoai = 'Y'");
            if (ArrDr.Length > 0)
            {
                Condition = "IDKQHT_XepLoai_1 = " + ArrDr[0]["KQHT_XepLoaiMonHocID"];
                //foreach (DataRow drXL in ArrDr)
                //{
                //    Condition += (Condition == "" ? "" : " OR ") + "IDKQHT_XepLoai_1 = " + drXL["KQHT_XepLoaiMonHocID"];
                //}

                SoLuong       = int.Parse(dtSinhVien.Compute("Count(SV_SinhVienID)", Condition).ToString());
                dr["LoaiYeu"] = TinhPhanTram(SoLuong, SoSinhVien);
            }
            // Tỷ lệ kém
            ArrDr = dtXepLoai.Select("MaXepLoai = 'KM'");
            if (ArrDr.Length > 0)
            {
                Condition = "IDKQHT_XepLoai_1 = " + ArrDr[0]["KQHT_XepLoaiMonHocID"];
                //foreach (DataRow drXL in ArrDr)
                //{
                //    Condition += (Condition == "" ? "" : " OR ") + "IDKQHT_XepLoai_1 = " + drXL["KQHT_XepLoaiMonHocID"];
                //}
                Condition += " OR IDKQHT_XepLoai_1 = 0";

                SoLuong       = int.Parse(dtSinhVien.Compute("Count(SV_SinhVienID)", Condition).ToString());
                dr["LoaiKem"] = TinhPhanTram(SoLuong, SoSinhVien);
            }

            dtMain.Rows.Add(dr);
            #endregion

            DataTable dtSub = oBKQHT_DiemThanhPhan.CreateTableReportSub_CDCNKT(dtSinhVien, dtThanhPhan, ColStart, IDKQHT_ThanhPhanTBHS);
            frmReport frm   = new frmReport(dtMain, dtSub, "rBangKetQuaHocTap", "rBangKetQuaHocTapSub", new string[] { "SubReport1" });
            frm.Show();
        }