Frage

Ich habe derzeit eine Klasse und ich bin versucht, zu erstellen eine einfache GUI zu erstellen, die eine Sammlung dieser Klasse.Die meisten der Attribute dieser Klasse sind Zeichenketten.Jedoch, eines der Attribute, die ich möchten, dass der Benutzer in der Lage sein, eine Enum.Deshalb möchte ich das user-interface, eine dropdownlist für diese enum, beschränken den Zugriff des Benutzers auf einen Wert, der nicht gültig ist.Derzeit nehme ich die ursprüngliche Liste von Objekten, indem Sie Sie an eine DataTable und festlegen der DataSource meiner DataGridView auf den Tisch.Funktioniert gut, sogar erstellt eine checkbox-Spalte für die eine Boolesche Eigenschaft.Aber, ich weiß nicht, wie man die Spalte für das enum in a dropdownlist.Ich bin mit C# und .NET 2.0.

Auch habe ich versucht die Zuordnung der DataSource der DataGridView, um die Liste der Objekte, aber wenn ich das mache, es hilft nichts mit dem enum-und ich bin nicht in der Lage zu erstellen neue Zeilen in der DataGridView, aber ich bin definitiv nicht dazu verpflichtet, die Verwendung einer DataTable als meine DataSource, es war einfach die option ich habe semi-arbeiten.

War es hilfreich?

Lösung

Ich weiß nicht, ob das mit einem Datagridview-Spalte funktionieren würde, aber es funktioniert mit Comboboxen:

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

und

MyEnum value = (MyEnum)comboBox1.SelectedValue;

UPDATE: Es arbeitet mit Datagridview-Spalten auch nur daran denken, den Werttyp festlegen

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

Andere Tipps

Oder, wenn Sie eine Filterung der Aufzählungswerte tun müssen, können Sie eine Schleife durch Enum.GetValues(typeof(EnumeratorName)) und fügen Sie die, die Sie wollen mit:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

Als Nebenwirkung, sondern als eine Datatable verwenden, können Sie die Datasource des Datagridview zu einem Binding Objekt festlegen können, mit der Datasource des Objekts Binding auf einen BindingList<Your Class>, die Sie auffüllen, indem Sie einen IList in den Konstruktor übergeben.

Eigentlich würde ich interessiert sein, von jemandem zu wissen, ob dies eine Datatable zu verwenden in Situationen bevorzugt, in denen Sie nicht bereits haben ein (das heißt es aus einem Datenbank-Aufruf zurückgegeben wird).

    if(e.KeyCode == Keys.Oem3)
    {

    }

Das ist für mich gearbeitet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top