How can I implement full databinding with an Enum?

I can easily load an enum into a combobox, but I am struggling to pass the selected data back to the table.  I am surely missing something simple, so can anyone help?

Chris Bray
public enum Gender
// in the relevant location:
genderAutoCompleteCombo.DataSource = Enum.GetValues(typeof(Gender));
genderAutoCompleteCombo.DisplayMember = "Display";  // this is not right
genderAutoCompleteCombo.ValueMember = "Value";  // nor is this
genderAutoCompleteCombo.DataBindings.Add("SelectedValue", adapter.Table, "GenderId");  // this should work once the other two are fixed!

Open in new window

Who is Participating?
Anurag ThakurConnect With a Mentor Technical ManagerCommented:
you need to loop through an enum and create a datatable first and then bind it to the datasource
you cannot do it directly

how to loop through enum and get name and value out - sample given below
int val;
foreach (string str in Enum.GetNames(typeof(enumName)))
      val = (int)Enum.Parse(typeof(enumName), str); // this is the int value of the enum
      // str is the name in the enum
      // this you can add to a datable
chrisbrayAuthor Commented:
Hi ragi0017:

Thaks for that.  I am surprised that there is not a better / quicker way, and I had thought about putting the data in a table in the first place which would also help with localisation.

Howver, I have implemented it as you suggest and put the full working code below in case someone else is looking for it in the future.

Chris Bray

            genderTable = new DataTable();
            DataColumn primaryColumn = new DataColumn("Id", typeof(int));
            genderTable.Columns.Add(new DataColumn("Gender", typeof(string)));
            genderTable.Columns.Add(new DataColumn("Value", typeof(int)));
            genderTable.PrimaryKey = new DataColumn[] { primaryColumn };
            int val;
            int count = 0;
            foreach (string str in Enum.GetNames(typeof(Gender)))
                val = (int)Enum.Parse(typeof(Gender), str); // this is the int value of the enum
                // str is the name in the enum
                // this you can add to a datable            
                DataRow row = genderTable.NewRow();
                row["Id"] = count++;
                row["Gender"] = str;
                row["Value"] = val;
            genderAutoCompleteCombo.DataSource = genderTable;
            genderAutoCompleteCombo.DisplayMember = "Gender";
            genderAutoCompleteCombo.ValueMember = "Value";
            genderAutoCompleteCombo.DataBindings.Add("SelectedValue", adapter.Table, "GenderId");

Open in new window

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.