ich diese Datenbank haben, nicht von meinem Design, aber ich habe mit ihm zu arbeiten, dass enthält eine Tabelle wie folgt:Wie Enum-Werte in Datagridview Spalte angezeigt werden
id | Name | status | ... -----+------------+----------+------ 1 | Product1 | 2 | ... 2 | Product2 | 2 | ... 3 | Product3 | 3 | ... ... | ... | ... | ...
Die Status Eigenschaft bezieht sich auf eine Enumeration, wo
0 = Invalid 1 = Dev 2 = Activ 3 = Old
Wenn ich diese Anzeige in einem schreibgeschützten Datagridview, würde ich den Benutzer wie den Namen des eNUM (Dev, Activ, ...) oder eine Beschreibung anstelle des numerischen Wert anzuzeigen. Der DatagridView ist an eine Datentabelle gebunden, die von einer DAL kommt, wiederum nicht von meinem Design, so dass ich die Datentabelle nicht wirklich ändern kann. Der einzige Weg, fand ich, wie das zu tun ist, indem auf das datagridview.CellFormating Ereignis hören, wo ich diesen Code setzen:
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;
}
}
}
Dies funktioniert gut, außer dass, wenn ich um 1k (nicht viel) oder mehr Einzelteile Es dauert ewig ... Gibt es einen besseren Weg, dies zu tun?
--- Bearbeiten ---
Dies funktioniert gut, wie es ist, mein Problem ist, dass, wenn es mehr als 1000 Zeilen in der Datentabelle gibt, es für immer dauert. Das Problem besteht darin, dass das CellFormating-Ereignis für jede Spalte ausgelöst wird, auch für diejenigen, die sie nicht benötigen. Sagen wir, ich zeige 15 Spalten an, und es gibt 1000 Zeilen, dann löst dieses Ereignis 15.000 Mal aus ...
Gibt es einen besseren Weg als das CellFormating Event? Oder gibt es eine Möglichkeit, das CellFormating-Ereignis nur einer Spalte hinzuzufügen? Oder was ?
@Oliver, K = Tausend; 1K = 1.000 – Brad
Wenn die Statusbeschreibungen in einer separaten Tabelle definiert sind, können Sie der Tabelle beitreten und die Beschreibungen als Teil der Daten zurückgeben, die Sie anzeigen möchten. Dies ist die Art von Dingen, die Datenbanken tun sollen, und ich finde es merkwürdig, dass die vorgeschlagenen Lösungen das Iterieren der von der Datenbank zurückgegebenen Ergebnisse beinhalten. Dieser Kommentar wird natürlich ungültig, wenn die erforderlichen Daten nicht in der Datenbank vorhanden sind oder Sie sie nicht selbst einfügen können. –
nein ... leider sind die Werte für den Status nicht in der DB (nicht mein Design) –