ho questa base di dati, non di mio progetto, ma devo lavorare con esso, che contiene una tabella in questo modo:Come visualizzare i valori enum nella colonna datagridview
proprietàid | Name | status | ... -----+------------+----------+------ 1 | Product1 | 2 | ... 2 | Product2 | 2 | ... 3 | Product3 | 3 | ... ... | ... | ... | ...
Lo stato si riferisce ad un enum in cui
0 = Invalid 1 = Dev 2 = Activ 3 = Old
Quando visualizzo questo in un datagridview sola lettura, desidero all'utente di vedere il nome della enum (Dev, Activ, ...) o una descrizione al posto del valore numerico. Il datagridview è associato a un datatable che proviene da un DAL, non ancora del mio design, quindi non posso davvero cambiare il datatable. L'unico modo che ho trovato il modo per farlo è quello ascoltando l'evento datagridview.CellFormating dove ho messo questo codice:
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;
}
}
}
Questo funziona bene, tranne che se ho intorno 1k (non più di tanto) o più elementi , ci vuole sempre ... C'è un modo migliore per farlo?
--- Modifica ---
Questo funziona bene così com'è, il mio problema è che se ci sono più di 1000 righe nel datatable, ci vuole per sempre. Il problema è che l'evento CellFormating si attiva per ogni colonna, anche per quelle che non ne hanno bisogno. Diciamo che visualizzo 15 colonne e ci sono 1000 righe, quindi quell'evento genera 15.000 volte ...
Esiste un modo migliore rispetto all'utilizzo dell'evento CellFormating? O c'è un modo per aggiungere l'evento CellFormating a una sola colonna? O cosa ?
@Oliver, K = mille; 1K = 1.000 – Brad
Se le descrizioni dello stato sono definite in una tabella separata, è possibile unirsi a tale tabella e restituire le descrizioni come parte dei dati che si intende visualizzare. Questo è il genere di cose che i database devono fare, e trovo strano che le soluzioni proposte implichino iterare sui risultati restituiti dal database. Ovviamente questo commento diventa discutibile se i dati richiesti non sono nel database o non è possibile inserirli da soli. –
no ... purtroppo i valori per lo stato non sono nel DB (non nella mia progettazione) –