private void btnXoaGio_Click(object sender, EventArgs e)
        {
            // xác nhận trước khi làm, nếu chọn cancel thì return
            if (MessageBox.Show("Xóa giờ chấm công tự động của nhân viên?", "Xác nhận", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return;
            }

            // lấy thông tin ly do, ghi chu
            string lydo   = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.Text;
            string ghichu = tbGhiChu.Text;

            // nếu thực hiện thì bật yêu cầu reload lại form xem công
            IsReload = true;

            // biến kq thực hiện thành công hay thất bại
            bool     flag = true;
            int      iUserEnrollNumber = -1;
            string   name = string.Empty;
            DateTime ngay = DateTime.MinValue;

            //update datagrid
            this.BindingContext[dgrdGioKDQD.DataSource].EndCurrentEdit();

            DataTable table = dgrdGioKDQD.DataSource as DataTable;             // lấy datatable của datagrid để lọc ra các dòng check = true

            if (table == null)
            {
                return;
            }
            DataRow[] arrRows = table.Select("check = true");            // lấy ds record có check, kiểm tra nếu ko check thì thoát
            if (arrRows.Length == 0)
            {
                return;
            }

            DateTime TimeStr = DateTime.MinValue;

            // duyệt qua từng ngày để xóa giờ, trong quá trình xóa nếu xảy ra lỗi thì thoát ra.
            for (int i = 0; i < arrRows.Length; i++)
            {
                DataRow row   = arrRows[i];
                cChk    check = row["objCheck"] as cChk;
                if (check == null)
                {
                    continue;
                }

                iUserEnrollNumber = (int)row["UserEnrollNumber"];
                TimeStr           = check.Time;
                bool kq = DAL.XoaGioChoNV(iUserEnrollNumber, check.Time, check.Source, check.MachineNo, ThamSo.currUserID, lydo, ghichu);
                if (kq == false)
                {
                    name = row["UserFullName"].ToString();
                    flag = false;
                    break;
                }
            }
            // nếu xảy ra lỗi thì báo, ko thì thông báo thành công
            if (flag == false)
            {
                MessageBox.Show("Xảy ra lỗi trong quá trình xoá giờ kể từ Nhân viên: " + name + " vào giờ " + TimeStr.ToString(), "Lỗi");
            }
            else
            {
                AutoClosingMessageBox.Show("Thực hiện thành công.", "Thông báo", 2000);
                this.Close();
            }
        }