Erstellen Sie Dropdown-Listenoptionen aus der Enumeration in einer DataGridView

Ich habe derzeit eine class und ich versuche, eine einfache GUI zu erstellen, um eine Sammlung dieser class zu erstellen. Die meisten Attribute dieser class sind Strings. Eines der Attribute, das der Benutzer festlegen können soll, ist jedoch ein Enum. Daher möchte ich, dass die Benutzeroberfläche über eine Dropdownliste für diese Enumeration verfügt, die den Benutzer daran hindert, einen ungültigen Wert einzugeben. Zurzeit nehme ich die erste Liste von Objekten, füge sie zu einer DataTable hinzu und setze die DataSource meiner DataGridView auf die Tabelle. functioniert gut, erstellt sogar eine Checkbox-Spalte für die eine boolesche Eigenschaft. Aber ich weiß nicht, wie ich die Spalte für das Enum in eine Dropdown-Liste umwandeln soll. Ich benutze C # und .NET 2.0.

Außerdem habe ich versucht, die DataSource der DataGridView der Liste meiner Objekte zuzuordnen, aber wenn ich dies tue, hilft es nicht mit der Enumeration und ich kann keine neuen Zeilen in der DataGridView erstellen, aber ich bin definitiv nicht gebunden an die Verwendung einer DataTable als meine DataSource, war es einfach die Option, die ich halb arbeite.

Ich weiß nicht, ob das mit einer DataGridView-Spalte funktionieren würde, aber es funktioniert mit ComboBoxen:

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum)); 

und:

 MyEnum value = (MyEnum)comboBox1.SelectedValue; 

UPDATE: Es funktioniert auch mit DataGridView-Spalten, denken Sie daran, den Werttyp festzulegen.

 DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); col.Name = "My Enum Column"; col.DataSource = Enum.GetValues(typeof(MyEnum)); col.ValueType = typeof(MyEnum); dataGridView1.Columns.Add(col); 

Oder, wenn Sie die Enumerator-Werte filtern müssen, können Sie Enum.GetValues ​​(typeof (EnumeratorName)) durchlaufen und die gewünschten hinzufügen:

 dataGridViewComboBoxColumn.Items.Add(EnumeratorValue) 

Neben der Verwendung einer DataTable können Sie die DataSource der DataGridView auf ein BindingSource-Objekt festlegen, wobei die DataSource des BindingSource-Objekts auf eine BindingList gesetzt wird, die Sie durch Übergeben einer IList in den Konstruktor füllen.

Eigentlich wäre es interessant, von irgendjemandem zu erfahren, ob dies einer DataTable in Situationen vorzuziehen ist, in denen Sie noch keine haben (dh sie wird von einem databaseaufruf zurückgegeben).