mam tę bazę danych, a nie mój projekt, ale mam z nim pracować, że zawiera tabela tak:Jak wyświetlić wartości enum w kolumnie DataGridView
nieruchomośćid | Name | status | ... -----+------------+----------+------ 1 | Product1 | 2 | ... 2 | Product2 | 2 | ... 3 | Product3 | 3 | ... ... | ... | ... | ...
Stan odnosi się do wyliczenia gdzie
0 = Invalid 1 = Dev 2 = Activ 3 = Old
Kiedy wyświetlić to w tylko do odczytu DataGridView, chciałbym użytkownika, aby zobaczyć nazwę wyliczenia (Dev, Activ, ...) lub opis zamiast wartości liczbowej. Datagridview jest związany z datatable, który pochodzi z DAL, ponownie nie z mojego projektu, więc nie mogę naprawdę zmienić datatable. Jedynym sposobem znalazłem jak zrobić to przez słuchanie przypadku datagridview.CellFormating gdzie mogę umieścić ten kod:
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;
}
}
}
Działa to dobrze, poza tym, że jeśli mam około 1k (nie tak dużo) lub więcej elementów , to trwa wiecznie ... Czy jest lepszy sposób to zrobić?
--- Edytuj ---
Działa to bez zarzutu, moim problemem jest to, że jeśli w datowalnym katalogu jest więcej niż 1000 wierszy, to trwa to zawsze. Problem polega na tym, że zdarzenie CellFormating jest wywoływane dla każdej kolumny, nawet dla tych, które jej nie potrzebują. Powiedzmy, że wyświetlam 15 kolumn, a tam jest 1000 wierszy, to zdarzenie wywołuje 15 000 czasu ...
Czy istnieje lepszy sposób niż użycie zdarzenia CellFormating? Czy istnieje sposób na dodanie zdarzenia CellFormating do tylko jednej kolumny? Albo co ?
@Oliver, K = tys. 1K = 1000 – Brad
Jeśli opisy stanu są zdefiniowane w osobnej tabeli, możesz dołączyć do tej tabeli i zwrócić opisy jako część danych, które chcesz wyświetlić. Tego rodzaju bazy danych mają na celu, a dziwnym jest, że proponowane rozwiązania polegają na iteracji wyników zwróconych przez bazę danych. Oczywiście ten komentarz staje się dyskusyjny, jeśli wymagane dane nie znajdują się w bazie danych lub nie można ich wstawić samodzielnie. –
nie ... Niestety wartości dla statusu nie są w DB (nie mój projekt) –