private void btnTongHop_Click(object sender, EventArgs e)
        {
            grbDiemTK.Visible = true;
            MathParser parser = new MathParser();
            int        SoMonL1, SoMonL2;
            double     TongHeSo = 0, TongSoDiemL1, TongSoDiemL2, DiemTK;
            bool       IsCoDiemLan2      = false;
            int        SoThapPhanLamTron = int.Parse((new cBKQHT_QuyChe()).GetByMaThamSo(pDM_LopInfo.IDDM_TrinhDo, "TBC_LAMTRON"));

            string[] arrStr;
            int      SoMonCoDiem = oBKQHT_DiemTongKetMon.GetSoMonCoDiemByLop(pDM_LopInfo.DM_LopID, Program.IDNamHoc, Program.HocKy, ref TongHeSo);

            if (dtSinhVien.Rows.Count > 0 && dtMonHoc != null && dtMonHoc.Rows.Count > 0 && SoMonCoDiem > 0)
            {
                for (int i = 0; i < dtSinhVien.Rows.Count; i++)
                {
                    TongSoDiemL1 = 0;
                    TongSoDiemL2 = 0;
                    SoMonL1      = 0;
                    SoMonL2      = 0;
                    IsCoDiemLan2 = false;

                    for (int j = dtColStart; j < dtSinhVien.Columns.Count; j += 2)
                    {
                        arrStr = dtSinhVien.Columns[j].ColumnName.Split('_');
                        if (arrStr.Length > 0)
                        {
                            DataRow[] dr = dtMonHoc.Select("DM_MonHocID=" + arrStr[0]);
                            if (dr.Length > 0 && (bool)dr[0]["TinhDiemToanKhoa"] == true)
                            {
                                if (dtSinhVien.Rows[i][dtSinhVien.Columns[j].ColumnName].ToString() != "")
                                {
                                    TongSoDiemL1 += double.Parse("0" + dtSinhVien.Rows[i][dtSinhVien.Columns[j].ColumnName]) * double.Parse("0" + dr[0]["SoHocTrinh"]);
                                    SoMonL1++;
                                }
                                if (dtSinhVien.Rows[i][dtSinhVien.Columns[j + 1].ColumnName].ToString() != "")
                                {
                                    IsCoDiemLan2  = true;
                                    TongSoDiemL2 += double.Parse("0" + dtSinhVien.Rows[i][dtSinhVien.Columns[j + 1].ColumnName].ToString()) * double.Parse("0" + dr[0]["SoHocTrinh"].ToString());
                                    SoMonL2++;
                                }
                                else if (dtSinhVien.Rows[i][dtSinhVien.Columns[j].ColumnName].ToString() != "")
                                {
                                    TongSoDiemL2 += double.Parse("0" + dtSinhVien.Rows[i][dtSinhVien.Columns[j].ColumnName].ToString()) * double.Parse("0" + dr[0]["SoHocTrinh"].ToString());
                                    SoMonL2++;
                                }
                            }
                        }
                    }

                    dtSinhVien.Rows[i]["DiemTK1"] = parser.Round(TongSoDiemL1 / TongHeSo, SoThapPhanLamTron, true);
                    DiemTK = double.Parse(dtSinhVien.Rows[i]["DiemTK1"].ToString());
                    for (int j = 0; j < dtXepLoai.Rows.Count; j++)
                    {
                        if (DiemTK >= double.Parse(dtXepLoai.Rows[j]["TuDiem"].ToString()))
                        {
                            dtSinhVien.Rows[i]["KQHT_XepLoaiTotNghiepID1"] = dtXepLoai.Rows[j]["KQHT_XepLoaiTotNghiepID"];
                            if (SoMonL1 < SoMonCoDiem)
                            {
                                dtSinhVien.Rows[i]["GhiChuL1"] = (SoMonCoDiem - SoMonL1).ToString() + " môn không có điểm";
                            }
                            else
                            {
                                dtSinhVien.Rows[i]["GhiChuL1"] = "";
                            }
                            break;
                        }
                    }
                    if (IsCoDiemLan2)
                    {
                        dtSinhVien.Rows[i]["DiemTK2"] = parser.Round(TongSoDiemL2 / TongHeSo, SoThapPhanLamTron, true);
                        DiemTK = double.Parse(dtSinhVien.Rows[i]["DiemTK2"].ToString());
                        for (int j = 0; j < dtXepLoai.Rows.Count; j++)
                        {
                            if (DiemTK >= double.Parse(dtXepLoai.Rows[j]["TuDiem"].ToString()))
                            {
                                dtSinhVien.Rows[i]["KQHT_XepLoaiTotNghiepID2"] = dtXepLoai.Rows[j]["KQHT_XepLoaiTotNghiepID"];
                                if (SoMonL2 < SoMonCoDiem)
                                {
                                    dtSinhVien.Rows[i]["GhiChuL2"] = (SoMonCoDiem - SoMonL2).ToString() + " môn không có điểm";
                                }
                                else
                                {
                                    dtSinhVien.Rows[i]["GhiChuL2"] = "";
                                }
                                break;
                            }
                        }
                    }
                    else
                    {
                        dtSinhVien.Rows[i]["DiemTK2"] = DBNull.Value;
                        dtSinhVien.Rows[i]["KQHT_XepLoaiTotNghiepID2"] = DBNull.Value;
                        dtSinhVien.Rows[i]["GhiChuL2"] = "";
                    }
                }
            }
        }
        private void XuLyTable()
        {
            // add diem cua mon hoc trong ky
            dtDiem = oBKQHT_DiemTongKetToanKhoa.GetTongHop(pDM_LopInfo, Program.IDNamHoc, int.Parse(cmbLanThi.EditValue.ToString()));
            DataTable dtThucTapTotNghiep = oBKQHT_DiemTongKetMon.GetDiemThucTapTotNghiep(pDM_LopInfo);
            DataRow   drNew;

            try
            {
                if (dtDiem.Rows.Count > 0)
                {
                    int    SoMonThiLai = 0, SoMonNo = 0, SoMonCoDiem = 0, SoMonDaCoDiem = 0;
                    double SoHocTrinhThiLai = 0, SoHocTrinhNo = 0, TongSoHocTrinh = 0;
                    object DiemTTTN;
                    string SV_SinhVienID = dtDiem.Rows[0]["SV_SinhVienID"].ToString(), MonThiLai = "", MonHocNo = "", HoDem = "";
                    string IDDM_Lop = dtDiem.Rows[0]["IDDM_Lop"].ToString();

                    drNew = dtSinhVien.NewRow();
                    drNew["SV_SinhVienID"]           = int.Parse(SV_SinhVienID);
                    drNew["MaSinhVien"]              = dtDiem.Rows[0]["MaSinhVien"].ToString();
                    drNew["TenSV"]                   = GetTen(dtDiem.Rows[0]["HoVaTen"].ToString(), ref HoDem);
                    drNew["HoVa"]                    = HoDem;
                    drNew["NgaySinh"]                = dtDiem.Rows[0]["NgaySinh"];
                    drNew["NoiSinh"]                 = "" + dtDiem.Rows[0]["NoiSinh"];
                    drNew["TenLop"]                  = dtDiem.Rows[0]["TenLop"].ToString();
                    drNew["DiemTK"]                  = dtDiem.Rows[0]["DiemTongKet"];
                    drNew["DiemTBMH"]                = dtDiem.Rows[0]["DiemTBMH"];
                    drNew["DiemTHXL"]                = dtDiem.Rows[0]["DiemTHXL"];
                    drNew["IDDM_Lop"]                = dtDiem.Rows[0]["IDDM_Lop"];
                    drNew["KQHT_XepLoaiTotNghiepID"] = dtDiem.Rows[0]["IDDM_XepLoai"];
                    drNew["GhiChu"]                  = dtDiem.Rows[0]["GhiChu"];

                    DiemTTTN = dtThucTapTotNghiep.Compute("Sum(Diem)", "IDSV_SinhVien = " + SV_SinhVienID.ToString());
                    if ("" + DiemTTTN != "")
                    {
                        drNew["DiemTTTN"] = Math.Round(double.Parse(DiemTTTN.ToString()), 1, MidpointRounding.AwayFromZero);
                    }

                    SoMonCoDiem = oBKQHT_DiemTongKetMon.GetSoMonCoDiemByLop(int.Parse(IDDM_Lop), 0, 0, ref TongSoHocTrinh);

                    foreach (DataRow dr in dtDiem.Rows)
                    {
                        if (dr["SV_SinhVienID"].ToString() != SV_SinhVienID)
                        {
                            if (SoMonThiLai > 0)
                            {
                                drNew["SoMonThiLai"]      = SoMonThiLai;
                                drNew["SoHocTrinhThiLai"] = SoHocTrinhThiLai;
                                drNew["MonThiLai"]        = MonThiLai;
                            }
                            if (SoMonNo > 0)
                            {
                                drNew["SoMonNo"]      = SoMonNo;
                                drNew["SoHocTrinhNo"] = SoHocTrinhNo;
                                drNew["MonHocNo"]     = MonHocNo;
                            }
                            if (SoMonDaCoDiem < SoMonCoDiem)
                            {
                                drNew["SoMonChuaCoDiem"] = SoMonCoDiem - SoMonDaCoDiem;
                            }

                            dtSinhVien.Rows.Add(drNew);
                            if (IDDM_Lop != dr["IDDM_Lop"].ToString())
                            {
                                IDDM_Lop    = dr["IDDM_Lop"].ToString();
                                SoMonCoDiem = oBKQHT_DiemTongKetMon.GetSoMonCoDiemByLop(int.Parse(IDDM_Lop), 0, 0, ref TongSoHocTrinh);
                            }
                            // Gán lại giá trị
                            SoMonThiLai      = 0;
                            SoHocTrinhThiLai = 0;
                            MonThiLai        = "";

                            SoMonDaCoDiem = 0;
                            SoMonNo       = 0;
                            SoHocTrinhNo  = 0;
                            MonHocNo      = "";

                            SV_SinhVienID = dr["SV_SinhVienID"].ToString();

                            drNew = dtSinhVien.NewRow();

                            drNew["SV_SinhVienID"]           = int.Parse(SV_SinhVienID);
                            drNew["MaSinhVien"]              = dr["MaSinhVien"].ToString();
                            drNew["TenSV"]                   = GetTen(dr["HoVaTen"].ToString(), ref HoDem);
                            drNew["HoVa"]                    = HoDem;
                            drNew["NgaySinh"]                = dr["NgaySinh"];
                            drNew["NoiSinh"]                 = "" + dr["NoiSinh"];
                            drNew["TenLop"]                  = dr["TenLop"].ToString();
                            drNew["DiemTK"]                  = dr["DiemTongKet"];
                            drNew["DiemTBMH"]                = dr["DiemTBMH"];
                            drNew["DiemTHXL"]                = dr["DiemTHXL"];
                            drNew["IDDM_Lop"]                = dr["IDDM_Lop"];
                            drNew["KQHT_XepLoaiTotNghiepID"] = dr["IDDM_XepLoai"];
                            drNew["GhiChu"]                  = dr["GhiChu"];

                            DiemTTTN = dtThucTapTotNghiep.Compute("Sum(Diem)", "IDSV_SinhVien = " + SV_SinhVienID.ToString());
                            if ("" + DiemTTTN != "")
                            {
                                drNew["DiemTTTN"] = Math.Round(double.Parse(DiemTTTN.ToString()), 1, MidpointRounding.AwayFromZero);
                            }

                            if ("" + dr["Diem"] != "")
                            {
                                try
                                {
                                    if (dr["LanThi"].ToString() == "2")
                                    {
                                        SoMonThiLai++;
                                        SoHocTrinhThiLai += double.Parse(dr["SoHocTrinh"].ToString());
                                        MonThiLai        += (MonThiLai == "" ? "" : ", ") + dr["TenMonHoc"];
                                    }
                                    //drNew["C" + "_" + dr["IDXL_MonHocTrongKy"].ToString()] = double.Parse(dr["Diem"].ToString());

                                    SoMonDaCoDiem++;
                                    if (double.Parse(dr["Diem"].ToString()) < 5.0)
                                    {
                                        SoMonNo++;
                                        SoHocTrinhNo += double.Parse(dr["SoHocTrinh"].ToString());
                                        MonHocNo     += (MonHocNo == "" ? "" : ", ") + dr["TenMonHoc"];
                                    }
                                }
                                catch { }
                            }
                        }
                        else
                        {
                            if ("" + dr["Diem"] != "")
                            {
                                try
                                {
                                    if (dr["LanThi"].ToString() == "2")
                                    {
                                        SoMonThiLai++;
                                        SoHocTrinhThiLai += double.Parse(dr["SoHocTrinh"].ToString());
                                        MonThiLai        += (MonThiLai == "" ? "" : ", ") + dr["TenMonHoc"];
                                    }
                                    //drNew["C" + "_" + dr["IDXL_MonHocTrongKy"].ToString()] = double.Parse(dr["Diem"].ToString());

                                    SoMonDaCoDiem++;
                                    if (double.Parse(dr["Diem"].ToString()) < 5.0)
                                    {
                                        SoMonNo++;
                                        SoHocTrinhNo += double.Parse(dr["SoHocTrinh"].ToString());
                                        MonHocNo     += (MonHocNo == "" ? "" : ", ") + dr["TenMonHoc"];
                                    }
                                }
                                catch { }
                            }
                        }
                    }

                    if (SoMonThiLai > 0)
                    {
                        drNew["SoMonThiLai"]      = SoMonThiLai;
                        drNew["SoHocTrinhThiLai"] = SoHocTrinhThiLai;
                        drNew["MonThiLai"]        = MonThiLai;
                    }
                    if (SoMonNo > 0)
                    {
                        drNew["SoMonNo"]      = SoMonNo;
                        drNew["SoHocTrinhNo"] = SoHocTrinhNo;
                        drNew["MonHocNo"]     = MonHocNo;
                    }
                    if (SoMonDaCoDiem < SoMonCoDiem)
                    {
                        drNew["SoMonChuaCoDiem"] = SoMonCoDiem - SoMonDaCoDiem;
                    }
                    dtSinhVien.Rows.Add(drNew);
                }
            }
            catch
            { }

            // add mon thi tot nghiep
            dtDiemTotNghiep = oBKQHT_DiemTongKetToanKhoa.GetDiemTotNghieps(pDM_LopInfo, Program.IDNamHoc, int.Parse(cmbLanThi.EditValue.ToString()));
            try
            {
                if (dtDiemTotNghiep.Rows.Count > 0)
                {
                    foreach (DataRow drSinhVien in dtSinhVien.Rows)
                    {
                        DataRow[] drTemp = dtDiemTotNghiep.Select("SV_SinhVienID=" + drSinhVien["SV_SinhVienID"]);
                        foreach (DataRow dr in drTemp)
                        {
                            if ("" + dr["Diem"] != "")
                            {
                                try
                                {
                                    drSinhVien["TN_" + dr["IDDM_MonHoc"]] = double.Parse(dr["Diem"].ToString());
                                }
                                catch { }
                            }
                        }
                    }
                }
            }
            catch
            { }
        }