2008-09-11 11 views
16

Actualmente tengo una clase y estoy tratando de crear una GUI fácil para crear una colección de esta clase. La mayoría de los atributos de esta clase son cadenas. Sin embargo, uno de los atributos que deseo que el usuario pueda establecer es un Enum. Por lo tanto, me gustaría que la interfaz de usuario, para tener una lista desplegable para esta enumeración, restrinja al usuario el ingreso de un valor que no es válido. Actualmente, estoy tomando la lista inicial de objetos, agregándolos a una DataTable y estableciendo el DataSource de mi DataGridView en la tabla. Funciona muy bien, incluso crea una columna de casilla de verificación para la propiedad booleana. Pero no sé cómo convertir la columna de la enumeración en una lista desplegable. Estoy usando C# y .NET 2.0.Crear opciones de lista desplegable de enum en un DataGridView

Además, he intentado asignar el DataSource de DataGridView a la lista de mis objetos, pero cuando lo hago, no ayuda con la enumeración y no puedo crear nuevas filas en DataGridView, pero Definitivamente no estoy obligado a utilizar un DataTable como mi DataSource, simplemente era la opción que tengo semi-working.

Respuesta

34

No sé si eso fuera a trabajar con una columna DataGridView pero funciona con ComboBoxes:

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

y:

MyEnum value = (MyEnum)comboBox1.SelectedValue; 

ACTUALIZACIÓN: Se trabaja con columnas DataGridView también, sólo recuerde establecer el tipo de valor

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

Cómo/Dónde obtener acceso a comboBox1? – ssal

3

O, si lo que necesita hacer algún tipo de filtrado de los valores del enumerador, se puede recorrer Enum.GetValues ​​(typeof (EnumeratorName)) y añadir las que desee usando:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue) 

Como Además, en lugar de utilizar una DataTable, puede establecer el DataSource de DataGridView en un objeto BindingSource, con el DataSource del objeto BindingSource configurado en una BindingList < Su clase >, que puede completar pasando un IList al constructor.

En realidad, me gustaría saber de cualquier persona si esto es preferible al uso de una DataTable en situaciones donde todavía no la tiene (es decir, se devuelve de una llamada a la base de datos).

Cuestiones relacionadas