c# - unbound - Crea opzioni di elenco a discesa da enum in un DataGridView




windows form application datagridview (2)

Al momento ho una lezione e sto cercando di creare una GUI semplice per creare una raccolta di questa classe. La maggior parte degli attributi di questa classe sono stringhe. Tuttavia, uno degli attributi che voglio che l'utente sia in grado di impostare è un Enum. Pertanto, vorrei che l'interfaccia utente, per avere un elenco a discesa per questa enumerazione, impedisse all'utente di inserire un valore che non è valido. Attualmente sto prendendo l'elenco iniziale di oggetti, aggiungendoli a un DataTable e impostando il DataSource del mio DataGridView sulla tabella. Funziona bene, anche crea una colonna di controllo per la proprietà booleana. Ma, non so come rendere la colonna per l'enum in un elenco a discesa. Sto usando C # e .NET 2.0.

Inoltre, ho provato ad assegnare il DataSource di DataGridView alla lista dei miei oggetti, ma quando lo faccio, non aiuta con l'enum e non sono in grado di creare nuove righe in DataGridView, ma sicuramente non lo sono associato all'uso di un DataTable come DataSource, era semplicemente l'opzione che ho semi-working.

https://code.i-harness.com


Non so se funzionerebbe con una colonna DataGridView ma funziona con i ComboBox:

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

e:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

AGGIORNAMENTO: Funziona anche con le colonne DataGridView, ricorda solo di impostare il tipo di valore.

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

Oppure, se è necessario fare un po 'di filtraggio dei valori dell'enumeratore, è possibile eseguire il ciclo attraverso Enum.GetValues ​​(typeof (EnumeratorName)) e aggiungere quelli che si desidera utilizzare:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

Per inciso, piuttosto che utilizzare un DataTable, è possibile impostare il DataSource di DataGridView su un oggetto BindingSource, con DataSource dell'oggetto BindingSource impostato su BindingList <Your Class>, che si popola passando un IList nel costruttore.

In realtà, sarei interessato a sapere da chiunque se è preferibile utilizzare un DataTable in situazioni in cui non ne possiedi già uno (cioè viene restituito da una chiamata al database).





.net-2.0