Вот два возможных решения.
Формат привязки и события Parse
Класс Binding
имеет встроенную функцию дляпреобразования связанных данных в форме Format и Parse events.
Вот как вы можете использовать эти события только с радиокнопкой «Male».Создайте привязку в коде, а не в конструкторе:
// create binding between "Sex" property and RadioButton.Checked property
var maleBinding = new Binding("Checked", bindingSource1, "Sex");
// when Formatting (reading from datasource), return true for M, else false
maleBinding.Format += (s, args) => args.Value = ((string)args.Value) == "M";
// when Parsing (writing to datasource), return "M" for true, else "F"
maleBinding.Parse += (s, args) => args.Value = (bool)args.Value ? "M" : "F";
// add the binding
maleRb.DataBindings.Add(maleBinding);
// you don't need to bind the Female radiobutton, just make it do the opposite
// of Male by handling the CheckedChanged event on Male:
maleRb.CheckedChanged += (s, args) => femaleRb.Checked = !maleRb.Checked;
Вычисляемое свойство
Другой подход заключается в добавлении вычисляемого свойства в ваш источник данных:
public bool IsMale
{
get { return Sex == "M"; }
set
{
if (value)
Sex = "M";
else
Sex = "F";
}
}
Теперь вы можете просто привязать радиокнопку Male к этому свойству в вашем источнике данных (просто не отображать это свойство в сетке).
И снова вы можете подключить самку к самцувот так:
maleRb.CheckedChanged += (s, args) => femaleRb.Checked = !maleRb.Checked;