В разделе комментариев к статье, на которую дана ссылка выше, один из авторов предлагает простое решение.
Вместо привязки с:
textBox1.DataBindings.Add("Text", myClass, "MyTextProperty");
Bind with:
textBox1.DataBindings.Add("Text", myClass, "MyTextProperty", true, DataSourceUpdateMode.OnPropertyChanged, string.Empty);
Я только что споткнулся через эту проблему сам, и это - реальная головная боль.
забавная вещь о привязке nullable типов состоит в том, что DataGridView обрабатывает их без любых проблем - это - просто текстовые поля та причина проблемы.
Это довольно противно - это даже, кажется, предотвращает закрытие формы, когда у Вас есть пустое значение в текстовом поле, и кажется, что Вы не можете снабдить вкладками далеко от него также.
Так, это не большой ответ, но мое предложение состоит в том, чтобы попытаться придерживаться datagridviews для nullable типов на форме.
Другое предложение состоит в том, чтобы использовать 'поставщика расширителя', как предложено здесь, хотя я еще не протестировал его:
РЕДАКТИРОВАНИЕ: теперь загрузили пример кода на этой странице, и это работает БЛЕСТЯЩЕ.
http://www.thejoyofcode.com/Databinding_and_Nullable_types_in_WinForms.NET.aspx
Ох, противный... Я могу только думать о нескольких способах достигнуть, это и ни один из них - то, что я назвал бы идеалом.
первое должно записать обертку для Вашего объекта данных, который содержит nullables, который преобразовывает весь nullables в пустые строки. Свяжите со своим интерфейсным объектом.
второе должно удостовериться, что все значения в Вашей базе данных не являются нулевыми... снова, не идеальный
третье, которое Вы уже решили, не жизнеспособно в этой ситуации, то, что Вы создаете пользовательский объект, который расширяет текстовое поле для добавления свойства, которое может связать с nullable.
четвертый самый идеальный способ, которым я мог думать, кажется, не возможен. Создайте дополнительное свойство, которое позволило бы Вам расширять все объекты текстового поля и связывать с тем - но не кажется, что дополнительные свойства возможны в это время. Действительно кажется, что это - ситуация, где этот тип функции был бы особенно полезен в платформе.NET.