Question

J'ai actuellement une classe et j'essaie de créer une interface graphique simple pour créer une collection de cette classe.La plupart des attributs de cette classe sont des chaînes.Cependant, l'un des attributs que je souhaite que l'utilisateur puisse définir est un Enum.Par conséquent, j'aimerais que l'interface utilisateur ait une liste déroulante pour cette énumération, afin d'empêcher l'utilisateur de saisir une valeur qui n'est pas valide.Actuellement, je prends la liste initiale des objets, je les ajoute à un DataTable et je définis la DataSource de mon DataGridView sur la table.Fonctionne bien, crée même une colonne de cases à cocher pour la seule propriété booléenne.Mais je ne sais pas comment transformer la colonne de l’énumération en une liste déroulante.J'utilise C# et .NET 2.0.

De plus, j'ai essayé d'attribuer la DataSource du DataGridView à la liste de mes objets, mais lorsque je fais cela, cela n'aide pas avec l'énumération et je ne parviens pas à créer de nouvelles lignes dans le DataGridView, mais je ne le suis certainement pas. lié à l'utilisation d'un DataTable comme DataSource, c'était simplement l'option que j'avais semi-fonctionnelle.

Était-ce utile?

La solution

Je ne sais pas si cela fonctionnerait avec une colonne DataGridView mais cela fonctionne avec les ComboBox :

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

et:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

MISE À JOUR:Cela fonctionne également avec les colonnes DataGridView, n'oubliez pas de définir le type de valeur.

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

Autres conseils

Ou, si vous devez filtrer les valeurs de l'énumérateur, vous pouvez parcourir Enum.GetValues(typeof(EnumeratorName)) et ajoutez ceux que vous voulez en utilisant :

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

En passant, plutôt que d'utiliser un DataTable, vous pouvez définir le DataSource du DataGridView sur un objet BindingSource, le DataSource de l'objet BindingSource étant défini sur un BindingList<Your Class>, que vous remplissez en passant un IList dans le constructeur.

En fait, j'aimerais savoir si cela est préférable à l'utilisation d'un DataTable dans des situations où vous n'en avez pas déjà un (c'est-à-direil est renvoyé par un appel à la base de données).

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

    }

Cela a fonctionné pour moi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top