• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 202
  • Last Modified:

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
    {
        Unknown,
        Male,
        Female
    }
            
// 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

0
chrisbray
Asked:
chrisbray
1 Solution
 
Anurag ThakurCommented:
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
}
0
 
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(primaryColumn);
            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;
                genderTable.Rows.Add(row);            
            }
 
            genderAutoCompleteCombo.DataSource = genderTable;
            genderAutoCompleteCombo.DisplayMember = "Gender";
            genderAutoCompleteCombo.ValueMember = "Value";
            genderAutoCompleteCombo.DataBindings.Add("SelectedValue", adapter.Table, "GenderId");

Open in new window

0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now