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