Pregunta

Actualmente tengo una clase y estoy tratando de crear una sencilla interfaz gráfica de usuario 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 quiero que el usuario sea capaz de establecer es una Enumeración.Por lo tanto, me gustaría que la interfaz de usuario, para tener un dropdownlist para este enum, restringir al usuario introducir un valor que no es válido.Actualmente, estoy tomando la lista inicial de los objetos, agregar a una tabla de datos y la configuración del origen de datos de mi DataGridView a la mesa.Funciona muy bien, incluso se crea una columna de casillas de verificación de la propiedad Booleana.Pero, no sé cómo hacer que la columna de la enumeración en un dropdownlist.Estoy usando C# y .NET 2.0.

También, he tratado de asignar el origen de datos del DataGridView a la lista de mis objetos, pero cuando hago esto, no ayuda con la enumeración y yo soy incapaz de crear nuevas filas en el DataGridView, pero sin dudas no estoy obligado a usar una tabla de datos como la de mi origen de datos, simplemente la opción que he semi-trabajo.

¿Fue útil?

Solución

No sé si funcionaría con un DataGridView columna, pero funciona con ComboBoxes:

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

y:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

ACTUALIZACIÓN:Funciona con DataGridView columnas demasiado, sólo recuerde para 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);

Otros consejos

O, si usted necesita hacer algunos filtrado del enumerador de valores, puede recorrer Enum.GetValues(typeof(EnumeratorName)) y añadir las que desee utilizar:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

Como un aparte, en lugar de utilizar una tabla de datos, puede establecer el origen de datos del DataGridView a un objeto BindingSource, con el origen de datos del objeto BindingSource conjunto a un BindingList<Your Class>, que rellenar por el paso de un IList en el constructor.

En realidad, me interesaría saber de alguien si esto es preferible el uso de una tabla de datos en situaciones donde usted no tiene ya uno (es decir,es devuelto de una base de datos llamada).

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

    }

Esto funcionó para mí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top