138 votes

Comment lier une Enum à un contrôle DropDownList en ASP.NET ?

Disons que j'ai l'énumération simple suivante :

enum Response
{
    Yes = 1,
    No = 2,
    Maybe = 3
}

Comment puis-je lier cet enum à un contrôle DropDownList afin que les descriptions soient affichées dans la liste et que la valeur numérique associée (1, 2, 3) soit récupérée une fois qu'une option a été sélectionnée ?

0voto

Henkie85 Points 107

Vous pouvez le faire beaucoup plus rapidement

public enum Test
    {
        Test1 = 1,
        Test2 = 2,
        Test3 = 3
    }
    class Program
    {
        static void Main(string[] args)
        {

            var items = Enum.GetValues(typeof(Test));

            foreach (var item in items)
            {
                //Gives you the names
                Console.WriteLine(item);
            }

            foreach(var item in (Test[])items)
            {
                // Gives you the numbers
                Console.WriteLine((int)item);
            }
        }
    }

0voto

MaxOvrdrv Points 792

Pour ceux d'entre nous qui veulent une solution C# fonctionnelle qui fonctionne avec n'importe quel drop et enum...

private void LoadConsciousnessDrop()
{
    string sel_val = this.drp_Consciousness.SelectedValue;
    this.drp_Consciousness.Items.Clear();
    string[] names = Enum.GetNames(typeof(Consciousness));

    for (int i = 0; i < names.Length; i++)
        this.drp_Consciousness.Items.Add(new ListItem(names[i], ((int)((Consciousness)Enum.Parse(typeof(Consciousness), names[i]))).ToString()));

    this.drp_Consciousness.SelectedValue = String.IsNullOrWhiteSpace(sel_val) ? null : sel_val;
}

0voto

TheRealSheldon Points 21

Je réalise que ce post est plus ancien et pour Asp.net, mais je voulais fournir une solution que j'ai utilisée récemment pour un projet c# Windows Forms. L'idée est de construire un dictionnaire où les clés sont les noms des éléments énumérés et les valeurs sont les valeurs énumérées. Vous liez ensuite le dictionnaire à la combobox. Voir une fonction générique qui prend une ComboBox et un Enum Type comme arguments.

    private void BuildComboBoxFromEnum(ComboBox box, Type enumType) {
        var dict = new Dictionary<string, int>();
        foreach (var foo in Enum.GetValues(enumType)) {
            dict.Add(foo.ToString(), (int)foo);
        }
        box.DropDownStyle = ComboBoxStyle.DropDownList; // Forces comboBox to ReadOnly
        box.DataSource = new BindingSource(dict, null);
        box.DisplayMember = "Key";
        box.ValueMember = "Value";
        // Register a callback that prints the Name and Value of the 
        // selected enum. This should be removed after initial testing.
        box.SelectedIndexChanged += (o, e) => {
            Console.WriteLine("{0} {1}", box.Text, box.SelectedValue);
        };
    }

Cette fonction peut être utilisée comme suit :

BuildComboBoxFromEnum(comboBox1,typeof(Response));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X