public frmBangChamCong(Control sender, List <clsPhongBan_DTO> lsPhongBan, ucTienLuong ucTL)
        {
            InitializeComponent();
            clsKyHieuChamCong_BUS BUSKH = new clsKyHieuChamCong_BUS();
            clsKyHieuChamCong_BUS BUKH  = new clsKyHieuChamCong_BUS();

            BUSPB       = new clsPhongBan_BUS(); // Lấy tất cả các phòng ban để hiển thị tên phòng bang ở sự kiện dgvBangChamCong_CellFormatting
            lsPhongBan2 = BUSPB.LayDanhSachPhongBan();

            this.lsPhongBan = lsPhongBan;
            frm_PhongBan    = sender as frmPhongBan;
            this.ucTL       = ucTL;

            int DayInMonth = DateTime.DaysInMonth(ucTL.Nam, ucTL.Thang); // Trả về tháng đó có bao nhiêu ngày

            for (var i = 1; i <= DayInMonth; i++)
            {
                var col = "col" + i;
                dgvBangChamCong.Columns[col].Visible = true;
                DataGridViewComboBoxColumn dgvcbo = (DataGridViewComboBoxColumn)dgvBangChamCong.Columns[col];
                dgvcbo.DataSource    = BUSKH.LayDanhSachKyHieu();
                dgvcbo.DisplayMember = "KYHIEU";
                dgvcbo.ValueMember   = "KYHIEU";
            }
        }
        // Sử dụng Autocomplete cho DatagriviewTextboxColumn. Dành cho khi ký hiệu chấm công có từ 2 ký hiệu trở lên
        public void addItems(AutoCompleteStringCollection col)
        {
            clsKyHieuChamCong_BUS        BUSKH = new clsKyHieuChamCong_BUS();
            List <clsKyHieuChamCong_DTO> lsKH  = BUSKH.LayDanhSachKyHieu();

            for (int i = 0; i < lsKH.Count; i++)
            {
                col.Add(lsKH[i].KyHieu);
            }
        }
        private void dgvBangChamCong_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                DataGridViewRow r = dgvBangChamCong.CurrentRow;
                r.Cells[e.ColumnIndex].Value = r.Cells[e.ColumnIndex].Value.ToString().ToUpper();
                string KyHieu = r.Cells[e.ColumnIndex].Value.ToString();
                clsKyHieuChamCong_BUS        BUSKH = new clsKyHieuChamCong_BUS();
                List <clsKyHieuChamCong_DTO> lsKH  = new List <clsKyHieuChamCong_DTO>();
                lsKH = BUSKH.LayDanhSachKyHieu();
                bool Flag = false; // Ký hiệu chấm công sai

                int      Ngay = Convert.ToInt32(dgvBangChamCong.Columns[e.ColumnIndex].Name.ToString().Replace("col", ""));
                DateTime dt   = new DateTime(ucTL.Nam, ucTL.Thang, Ngay);
                if (dt.DayOfWeek != 0)
                {
                    for (int i = 0; i < lsKH.Count; i++)
                    {
                        if (lsKH[i].KyHieu == "CN")
                        {
                            lsKH.RemoveAt(i); //Xóa ký hiệu CN ở những ngày thường
                            break;
                        }
                    }
                }
                foreach (clsKyHieuChamCong_DTO KH in lsKH)
                {
                    if (KyHieu == KH.KyHieu)
                    {
                        Flag = true; // Ký hiệu chấm công vừa nhập là phù hợp
                    }
                }
                //if (Flag == false)
                //{
                //    // Cho phép số và dấu chấm (Số lẻ)
                //    Regex invalidCharsRegex = new Regex(@"(?<=^| )\d+(\.\d+)?(?=$| )|(?<=^| )\.\d+(?=$| )");
                //    if (invalidCharsRegex.IsMatch(KyHieu))
                //    {
                //        if (Convert.ToDouble(KyHieu) <= 24) //Thời gian làm phải nhỏ hơn hoặc bằng 24 tiếng
                //        {
                //            Flag = true;
                //        }
                //    }
                //}
                if (Flag == false) //Ký hiệu chấm công sai
                {
                    r.Cells[e.ColumnIndex].Value           = null;
                    r.Cells[e.ColumnIndex].Style.BackColor = Color.Green;
                }
                btnLuu.Enabled = true;
            }
            catch { }
        }