Chắc các bạn từng có lần gặp phải và muốn khắc phục tình trạng mã tự động sinh chứ không cần nhập vào.
Bài viết hôm nay tôi sẽ hướng dẫn các bạn làm 1 đoạn code giải quyết vấn đề này.
Đầu tiên các bạn định trước cho mình định dạng của mã sau khi sinh ra là như thế nào.
Ở đây ví dụ tội có định dạng mã cho nhân viên như sau: NV001 – NV999. tức là công ty tối đa 999 nhân viên.
Mã tự động sinh ra sẽ tự động chèn vào khoảng trống giữa 2 mã không liền kề nhau. ví dụ có NV001, NV003 thì mã tự động tạo ra sẽ là NV002.
Đầu tiên các bạn lấy về cho tôi 1 DataTable chứa toàn bộ nhân viên nhé các bạn:

DataTable dt = new DataTable();
dt = nvMod.GetAllData(); // hàm GetAllData trong class NhanVienMod sẽ trả lại 1 Datatable chứa toàn bộ nhân viên.

Tạo 1 biến lưu giá trị số thứ tự của nhân viên

int coso = 0;

Tiếp điến ta code và kiểm tra các trường hợp có thể xảy ra với DataTable danh sách nhân viên:

if (dt.Rows.Count == 0)// nếu danh sách nhân viên rỗng
{
    coso = 1;
}
else if (dt.Rows.Count == 1 && int.Parse(dt.Rows[0][0].ToString().Substring(2, 3)) == 1) // nếu danh sách nhân viên có 1 nhân viên và mã người này là NV001
{
    coso = 2;
}
else if (dt.Rows.Count == 1 && int.Parse(dt.Rows[0][0].ToString().Substring(2, 3)) > 1) // nếu danh sách có 1 nhân viên mà mã người này khác NV001
{
    coso = 1;
}
else // nếu danh sách có hơn 1 nhân viên
{
    for (int i = 0; i < dt.Rows.Count - 1; i++)
    {
        if (int.Parse(dt.Rows[i + 1][0].ToString().Substring(2, 3)) - int.Parse(dt.Rows[i][0].ToString().Substring(2, 3)) > 1)
        {
            coso = int.Parse(dt.Rows[i][0].ToString().Substring(2,3)) + 1;
            break;
        }
        coso = int.Parse(dt.Rows[dt.Rows.Count - 1][0].ToString().Substring(2, 3)) + 1;
    }
}

Sau khi lấy được cơ số thứ tự của nhân viên, ta gắn thêm tiền tố NV vào:

string ma = "";
if (coso < 10)
    ma = "NV00" + coso;
else if (coso < 100)
    ma = "NV0" + coso;
else
    ma = "NV" + coso;

Và đây là full code:

Code đầy đủ

Loading

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *