В Windows Forms (.NET 2.0, Visual Studio 2005 SP1): Я типизированный DataSet, с колонкой , какой тип System.Boolean, который обнуляемым и какое значение по умолчанию DBNull. У меня есть Form, содержащий CheckBoxэлемент управления , который я хочу , чтобы привязать к значению предыдущего столбца.
- Я пытался связать
Checkedсвойство столбца через конструктора: он прекрасно работает, только если значение по умолчанию для столбца устанавливается либоTrueилиFalse. Я пытался связать
CheckStateсвойство столбца с помощью конструктора, и приложив свои собственныеFormatиParseобработчик событий , но они никогда не дозвонились:b.Format+=delegate(object sender, ConvertEventArgs cevent) { cevent.Value=DoFormat((CheckState)cevent.Value); // cf. end of the question }; b.Parse+=delegate(object sender, ConvertEventArgs cevent) { cevent.Value=DoParse(cevent.Value); // cf. end of the question };Я пытался создать пользовательский
Bindingэкземпляр в коде, приложите свои обработчики событий и добавить его вCheckBoxпереплетах: обработчики событий никогда еще никогда не дозвонились ...Binding b=new Binding(CheckState, _BindingSource, MyColumn, false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
Как примечание: DBNullзначение приемлемо только тогда , когда исходит от DataSet(это означает , что значение никогда не был установлен). Но пользователь должен только быть в состоянии установить значение Trueили с Falseпомощью CheckBox.
Для справки, вот код синтаксического анализа и форматирования методов:
internal static CheckState DoParse(object value)
{
if ((value==null) || (value is DBNull))
return CheckState.Indeterminate;
bool v=Convert.ToBoolean(value);
return (v ? CheckState.Checked : CheckState.Unchecked);
}
internal static object DoFormat(CheckState value)
{
switch (value)
{
case CheckState.Checked:
return true;
case CheckState.Indeterminate:
return DBNull.Value;
case CheckState.Unchecked:
return false;
}
return null;
}













