Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > пустое значение через textbox


Автор: Ana1oliy 15.5.2011, 18:26
Всем доброго времени суток!

Имеется на форме TextBox, связанный с BindingSource. Если взамен текущего значения ввести пустую строку, т.е. удалить весь текст, TextBox не отдаёт фокус. Тип поля, с которым связан этот TextBox, числовой, поле не обязательное, база данных access. Собстенно, почему так происходит и как мне можно ввести в поле пустое значение?

Автор: Экскалупатор 15.5.2011, 19:42
 smile надо узнать у астрологов неделю кого они объявили что столько народу поперло....


Ana1oliy, может как то более конкретизируем проблему? а я кому то подарил свой шаманский бубен в связи с чем у меня пропал дар ясновидения. не осмеливаюсь спросить почему вопрос про текстбокс задается в ветки про базы данных, я думаю вразумительного ответа не дождусь. что значит текстбокс не отдает фокус? кто писал приложение? может быть в обработчике события текстбокса установлено что он не может быть пустым и на него постоянно возвращается фокус.

Автор: -Mikle- 15.5.2011, 20:13
 smile  мдя уж....

Автор: Gluttton 15.5.2011, 22:21
 smile 
Цитата(Экскалупатор @  15.5.2011,  19:42 Найти цитируемый пост)
а я кому то подарил свой шаманский бубен в связи с чем у меня пропал дар ясновидения

Бубен у меня, но я тоже ничего не понял.


Ana1oliy, проблема возможно в том, что в БД должно поступать NULL, а не '' (пустая строка).

Автор: Voyager 16.5.2011, 00:13
Попробуйте событие Binding.Parse

Код

Binding binding = new Binding("Text", BindingSource, "NUMFIELD");
binding.Parse += ParseEventHandler;
TextBox.DataBindings.Add(binding);

 private void ParseEventHandler(object sender, ConvertEventArgs e)
{
   // вот тут сами разберитесь как вам надо преобразовывать
    if (e.Value == null || e.Value == DbNull.Value || e.Value == "")
            e.Value = 0;
 } 

 

Автор: Ana1oliy 16.5.2011, 04:07
Экскалупатор
Цитата

Почему вопрос про текстбокс задается в ветки про базы данных

потому что проблема скорее всего не в самом тексбоксе, а в связанном с ним компоненте байндингсурс.
Цитата

что значит текстбокс не отдает фокус?

Это значит что при щелчке мыши на каком либо другом компоненте (текстбоксе, кнопке или чём-то ещё) фокус ввода остается на данном текстбоксе и компоненты никак не реагируют на действия пользователя, не реагируют даже кнопки управления окном.
Цитата

кто писал приложение? 

Я.
Цитата

может как то более конкретизируем проблему?

Попробуем. Итак, кинул на форму текстбокс. Создал соединение с БД, всё как положено. связал свойство "текст" текстбокса через DataBindings с полем некоторой таблицы. Тип поля - число, поле не обязательное, т.е. может принимать null. Запускаю на выполнение и если сотру текст, записанное туда число, или что-то запишу, а потом сотру, случается указанная выше проблема. Если же связать его с полем БД, которое имеет текстовый тип, то таких проблем не наблюдается. Никаких обработчиков событий не установлено. Голый текстбокс с параметрами по умолчанию.


Gluttton
Да, должно, но ведь при связи текстбокса с БД, текст, если это возможно сам преобразуется к нужному типу. Если поле числовое, то в число нужного типа, если дата, то в дату. И вместо пустой строки, думаю, в БД тоже должно уходить null. Да и обычно если DataSet не устраивает, то что ему пихают, он ругается, а тут молчит. Еще я пробовал обрабатывать событие textChanged и если имеем пустую строку записывать в нужное поле таблицы датасета DBNull.Value, но не помогло, да и большие сомнения в правильности подхода. Попробую то, что предложил Voyager


Voyager
Большое спасибо, буду пробовать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)