Tôi có cơ sở dữ liệu này, không phải của thiết kế của tôi, nhưng tôi phải làm việc với nó, có chứa một bảng như sau:Làm thế nào để hiển thị giá trị enum trong cột datagridview
tài sảnid | Name | status | ... -----+------------+----------+------ 1 | Product1 | 2 | ... 2 | Product2 | 2 | ... 3 | Product3 | 3 | ... ... | ... | ... | ...
Tình trạng đề cập đến một enum nơi
0 = Invalid 1 = Dev 2 = Activ 3 = Old
Khi tôi hiển thị điều này trong chế độ xem dữ liệu chỉ đọc, tôi muốn người dùng thấy tên của enum (Dev, Activ, ...) hoặc mô tả thay vì giá trị số. Datagridview được ràng buộc với một datatable mà đến từ một DAL, một lần nữa không phải thiết kế của tôi, vì vậy tôi không thể thực sự thay đổi datatable. Cách duy nhất tôi thấy làm thế nào để làm điều đó là bằng cách lắng nghe sự kiện datagridview.CellFormating nơi tôi đặt mã này:
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 3) // column of the enum
{
try
{
e.Value = getEnumStringValue(e.Value);
}
catch (Exception ex)
{
e.Value = ex.Message;
}
}
}
này hoạt động tốt, ngoại trừ rằng nếu tôi có khoảng 1k (không phải là nhiều) hoặc nhiều mục , phải mất mãi mãi ... Có cách nào tốt hơn để thực hiện việc này không?
--- Chỉnh sửa ---
Điều này làm việc tốt vì nó là, vấn đề của tôi là nếu có hơn 1000 hàng trong datatable, phải mất bao giờ hết. Vấn đề là sự kiện CellFormating kích hoạt cho mọi cột, ngay cả những cái không cần nó. Giả sử tôi hiển thị 15 cột và có 1000 hàng, sau đó sự kiện đó kích hoạt 15 000 lần ...
Có cách nào tốt hơn so với sử dụng Sự kiện CellFormating không? Hoặc có cách nào để thêm Sự kiện CellFormating vào chỉ một Cột không? Hay cái gì ?
@Oliver, K = thousand; 1K = 1,000 – Brad
Nếu mô tả trạng thái được xác định trong một bảng riêng biệt thì bạn có thể tham gia trên bảng đó và trả về mô tả như một phần của dữ liệu bạn muốn hiển thị. Đây là loại cơ sở dữ liệu điều có nghĩa là để làm, và tôi thấy nó kỳ quặc rằng các giải pháp đề xuất liên quan đến việc lặp qua các kết quả trả về bởi cơ sở dữ liệu. Tất nhiên nhận xét này sẽ trở thành tranh luận nếu dữ liệu yêu cầu không có trong cơ sở dữ liệu hoặc bạn không thể tự chèn nó. –
không ... thật đáng buồn là các giá trị cho trạng thái không nằm trong DB (không phải thiết kế của tôi) –