Работа TextBox с типизированным dataset и null-значениями
От: АннаЦ  
Дата: 18.10.06 10:09
Оценка:
Всем добрый день!
Возникла следующая проблема.
Имеется типизированный dataset и в нем поле типа Decimal, свойство AllowDBNull установлено в true.
На форме лежит TextBox, связанный с этим полем. Так вот, если ввести что-то в этот TextBox, а затем все стереть, то уйти с этого TextBox-а не получается. По-видимому, это происходит из-за того, что в dataset для данного поля свойство NullValue установлено в Throw exception, а поскольку в TextBox-е ничего нет, то этот exception и не позволяет уйти с TextBox-а. Как бы это обойти?
Работаю с VisualStudio2005.
Re: Работа TextBox с типизированным dataset и null-значениям
От: Greeter  
Дата: 18.10.06 10:22
Оценка:
Здравствуйте, АннаЦ, Вы писали:

АЦ>Всем добрый день!

АЦ>Возникла следующая проблема.
АЦ>Имеется типизированный dataset и в нем поле типа Decimal, свойство AllowDBNull установлено в true.
АЦ>На форме лежит TextBox, связанный с этим полем. Так вот, если ввести что-то в этот TextBox, а затем все стереть, то уйти с этого TextBox-а не получается. По-видимому, это происходит из-за того, что в dataset для данного поля свойство NullValue установлено в Throw exception, а поскольку в TextBox-е ничего нет, то этот exception и не позволяет уйти с TextBox-а. Как бы это обойти?
АЦ>Работаю с VisualStudio2005.

Да, встречается такая ошибка. Сделайте вот что:
1) Убедитесь в том, что тип поля в DataTable в точности соответствует типу столбца в таблице СУБД
2) После загрузки данных явно выставьте BindingContext.Position для той DataTable, к которой привязан TextBox:

this.BindingContext[dataSet, dataTable].Position = 0;
Re[2]: Работа TextBox с типизированным dataset и null-значен
От: АннаЦ  
Дата: 18.10.06 11:14
Оценка:

Да, встречается такая ошибка. Сделайте вот что:
1) Убедитесь в том, что тип поля в DataTable в точности соответствует типу столбца в таблице СУБД
2) После загрузки данных явно выставьте BindingContext.Position для той DataTable, к которой привязан TextBox:

this.BindingContext[dataSet, dataTable].Position = 0;



К сожалению, не помогло
Re: Работа TextBox с типизированным dataset и null-значениям
От: Poul_Ko Казахстан  
Дата: 19.10.06 03:58
Оценка:
Здравствуйте, АннаЦ, Вы писали:

...
АЦ>На форме лежит 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, то всё равно будет возникать эксепшн.
Brainbench transcript #6370594
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.