Trong quá trình xây dựng project, có trường dữ liệu cố định phân quyền mà chúng ta không cần thiết phải sử dụng trong database, trường dữ liệu bao gồm kiểu chữ và số. Do đó, giải pháp để hiển thị danh sách dữ liệu cố định là sử dụng Enum, sau đó chuyển đổi Enum sang kiểu List. Kết hợp với Linq để thể hiện tìm kiếm đẩy dữ liệu ra theo các tiêu chí lựa chọn.
Đầu tiên, bạn tạo một class như sau
public class ModelQuyenHan
{
public string TenQuyenHan { get; set; }
public int MaQuyenHan { get; set; }
public string MaThanhVien { get; set; }
}
Sau đó, chèn thêm một Enum để thể hiện giá trị tương ứng
public enum QuyenHan
{
LopTruong = 1,
SinhVien = 2,
BanChapHanh = 3,
BanThuongVu = 4,
QuanLyWebsite = 5,
BiThu = 6,
QuanLyKTX = 7,
GiangVien = 8,
CuuSinhVien = 9
}
Mình thể hiện nội dung, thuộc tính bằng tiếng việt để mọi người dễ dàng hình dung. Bây giờ thì đổ dữ liệu ra thôi nhỉ!? Chú ý là Binding dữ liệu ở đâu thì chèn vào ở đó nhé
List<ModelQuyenHan> tlist_ChucVu = ((QuyenHan[])Enum.GetValues(typeof(QuyenHan))).Select(c => new ModelQuyenHan() { MaQuyenHan = (int)c, TenQuyenHan = c.ToString(), MaThanhVien = H_MaSinhVien.Value }).ToList();
rpQuyenHan.DataSource = tlist_ChucVu;
rpQuyenHan.DataBind();
Giải thích:
- ModelQuyenHan: Là Class chứa các thuộc tính mà chúng ta đã khởi tạo ở trên
- Enum.GetValues: Lấy giá trị tương ứng theo cột value
- ToList: Chuyển đổi các value sang list để hiển thị trên Repeater
Tại trang ASPX, chúng ta chỉ cần dòng sau tương ứng model mà ta đã tạo ở trên
<%# Eval("TenQuyenHan")%>
Tuy nhiên, kết quả hiển thị sẽ là chữ liền, không dấu theo đúng giá trị thuộc tính mà ta đã khởi tạo. Vì vậy chúng ta cần tạo hàm trả về chuỗi tiếng việt có dấu tương ứng điều kiện cho trước
<%# getTenQuyenHan(Eval("TenQuyenHan"))%>
Tại server
public string getTenQuyenHan(object ob)
{
if (ob.ToString() == QuyenHan.LopTruong.ToString())
{
return "Lớp trưởng";
}
if (ob.ToString() == QuyenHan.SinhVien.ToString())
{
return "Sinh viên";
}
if (ob.ToString() == QuyenHan.BanChapHanh.ToString())
{
return "Ban chấp hành";
}
if (ob.ToString() == QuyenHan.BanThuongVu.ToString())
{
return "Ban thường vụ";
}
if (ob.ToString() == QuyenHan.QuanLyWebsite.ToString())
{
return "Quản lý Website";
}
if (ob.ToString() == QuyenHan.BiThu.ToString())
{
return "Bí thư";
}
if (ob.ToString() == QuyenHan.QuanLyKTX.ToString())
{
return "Phòng Công tác sinh viên";
}
if (ob.ToString() == QuyenHan.GiangVien.ToString())
{
return "Giảng viên";
}
if (ob.ToString() == QuyenHan.CuuSinhVien.ToString())
{
return "Cựu Sinh viên";
}
return "";
}
Câu lệnh này khá dài. Bạn có thể nghĩ cách để nó tối giản lại nhé :) Có thể sử dụng mảng đối tượng chẳng hạn...