You can take advantage of the Format and Parse events on the databinding to the textbox to translate between Text and Enum:
Binding b = new Binding("Text", this.bs, "Gender", true, DataSourceUpdateMode.OnPropertyChanged);
b.Parse += new ConvertEventHandler(TextToGender);
b.Format += new ConvertEventHandler(GenderToText);
this.textBox1.DataBindings.Add(b);
Next, implement the two methods to perform the translation:
void GenderToText(object sender, ConvertEventArgs e)
{
Gender gender = (Gender)Enum.Parse(typeof(Gender), e.Value as string);
switch (gender)
{
case Gender.Male:
e.Value = "Male";
break;
case Gender.Female:
e.Value = "Female";
break;
default:
e.Value = "Unknown";
break;
}
}
void TextToGender(object sender, ConvertEventArgs e)
{
switch (e.Value as string)
{
case "Male":
e.Value = Gender.Male;
break;
case "Female":
e.Value = Gender.Female;
break;
default:
e.Value = Gender.Unknown;
break;
}
}
However, take good care about what to do when someone types "Gremlin" or something in the TextBox, do you have a Enum value that corresponds to an empty or unknown value, then use that in both default cases.