Да, встречается такая ошибка. Сделайте вот что:
1) Убедитесь в том, что тип поля в DataTable в точности соответствует типу столбца в таблице СУБД
2) После загрузки данных явно выставьте BindingContext.Position для той DataTable, к которой привязан TextBox:
this.BindingContext[dataSet, dataTable].Position = 0;
К сожалению, не помогло
Здравствуйте, АннаЦ, Вы писали:
...
АЦ>На форме лежит TextBox, связанный с этим полем. Так вот, если ввести что-то в этот TextBox, а затем все стереть, то уйти с этого TextBox-а не получается. По-видимому, это происходит из-за того, что в dataset для данного поля свойство NullValue установлено в Throw exception, а поскольку в TextBox-е ничего нет, то этот exception и не позволяет уйти с TextBox-а. Как бы это обойти?
...
Уйти с TextBox'а не получается из-за валидации. В событии Validating текстбокса напишите e.Cancel=false. Однако необходимо сделать так, чтобы этот обработчик был последним (например, добавлять его явно в событии Shown формы).
В догонку:
1. см. свойство AutoValidate формы — его значение определяет, будет ли происходить валидация и как она повлияет на фокус
2. см. свойство CausesValidation контролов — если его сделать false, то валидация не будет происходить при перемещении фокуса на это контрол (удобно, например, для кнопки "Отмена")
3. см. событие Parse объекта Binding, который осуществляет биндинг данных от текстбокса к полю, возможно исключение возникает в нём, так как он не может запарсить пустую строку в Decimal. Я когда-то делал так:
private void Binding_Parse(object sender, ConvertEventArgs e)
{
if (e.Value is string && string.IsNullOrEmpty((string)e.Value))
e.Value=System.DBNull.Value;
}
Однако, если поле не принимает значения null, то всё равно будет возникать эксепшн.