Присвоение полю значения DBNull
От: Андрей Титов http://imul.org
Дата: 17.05.07 13:52
Оценка:
У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).

Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).

Я так понял полю нужно присвоить значение DBNull, а как это сделать?
Re: Присвоение полю значения DBNull
От: kisel Украина  
Дата: 17.05.07 14:15
Оценка:
Здравствуйте, Андрей Титов, Вы писали:

АТ>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).


АТ>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).


АТ>Я так понял полю нужно присвоить значение DBNull, а как это сделать?

А какой тип данных у твоего поля?
Re[2]: Присвоение полю значения DBNull
От: Андрей Титов http://imul.org
Дата: 17.05.07 14:18
Оценка:
Здравствуйте, kisel, Вы писали:

K>Здравствуйте, Андрей Титов, Вы писали:


АТ>>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).


АТ>>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).


АТ>>Я так понял полю нужно присвоить значение DBNull, а как это сделать?

K>А какой тип данных у твоего поля?

Тип данных Double
Re[3]: Присвоение полю значения DBNull
От: kisel Украина  
Дата: 17.05.07 14:21
Оценка:
Здравствуйте, Андрей Титов, Вы писали:

АТ>Здравствуйте, kisel, Вы писали:


K>>Здравствуйте, Андрей Титов, Вы писали:


АТ>>>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).


АТ>>>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).


АТ>>>Я так понял полю нужно присвоить значение DBNull, а как это сделать?

K>>А какой тип данных у твоего поля?

АТ>Тип данных Double

если Double то как оно может принимаь значение Null?
Или ты используешь типизированные DataSet-ы?
Re: Присвоение полю значения DBNull
От: Андрей Титов http://imul.org
Дата: 17.05.07 14:27
Оценка:
АТ> если Double то как оно может принимаь значение Null?
АТ> Или ты используешь типизированные DataSet-ы?

Да DataSet'ы типизированные

(извиняюсь что сразу не описал этого)
Re[2]: Присвоение полю значения DBNull
От: kisel Украина  
Дата: 17.05.07 14:36
Оценка:
Здравствуйте, Андрей Титов, Вы писали:

АТ>> если Double то как оно может принимаь значение Null?

АТ>> Или ты используешь типизированные DataSet-ы?

АТ>Да DataSet'ы типизированные


АТ>(извиняюсь что сразу не описал этого)

1) MyDataSet.MyDataTable[0].Set<NameColumn>Null() — студия генерирует такой метод
2) MyDataSet.MyDataTable[0]["NameColumn"] = DBNull.Value;
Но похоже тебе нужно не это а в чё1м именно проявляется "и запись уже не добавить (поле числовое)."?
Выпадает какой то Exception или как то по другому?
Re[3]: Присвоение полю значения DBNull
От: Андрей Титов http://imul.org
Дата: 17.05.07 15:04
Оценка:
Здравствуйте, kisel, Вы писали:



K>1) MyDataSet.MyDataTable[0].Set<NameColumn>Null() — студия генерирует такой метод

K>2) MyDataSet.MyDataTable[0]["NameColumn"] = DBNull.Value;

Ну я так понимаю это подойдёт когда запись уже существует в DataSet, в моём случае её там ещё нет — т.е. BindingSource видимо содержит её где-то у себя



K>Но похоже тебе нужно не это а в чё1м именно проявляется "и запись уже не добавить (поле числовое)."?

K>Выпадает какой то Exception или как то по другому?

Просто невозможно перевести фокус с этого поля куда-либо ещё, ни даже закрыть форму, но если снова ввести число то все становится нормально, т.е. это повидимому из-за того что пустое поле — не NULL и не число, поэтому переход блокируется.
Re[4]: Присвоение полю значения DBNull
От: kisel Украина  
Дата: 17.05.07 15:13
Оценка:
Здравствуйте, Андрей Титов, Вы писали:

K>>Но похоже тебе нужно не это а в чё1м именно проявляется "и запись уже не добавить (поле числовое)."?

K>>Выпадает какой то Exception или как то по другому?

АТ>Просто невозможно перевести фокус с этого поля куда-либо ещё, ни даже закрыть форму, но если снова ввести число то все становится нормально, т.е. это повидимому из-за того что пустое поле — не NULL и не число, поэтому переход блокируется.

Binding к контролу как реализован?
Re[5]: Присвоение полю значения DBNull
От: Андрей Титов http://imul.org
Дата: 17.05.07 15:34
Оценка:
Здравствуйте, kisel, Вы писали:

K>Binding к контролу как реализован?


В свойствах контрола в DataBindings свойство Text просто установил в MyBindingSource — MyColumn.
Re[6]: Присвоение полю значения DBNull
От: kisel Украина  
Дата: 17.05.07 15:41
Оценка:
Здравствуйте, Андрей Титов, Вы писали:

АТ>Здравствуйте, kisel, Вы писали:


K>>Binding к контролу как реализован?


АТ>В свойствах контрола в DataBindings свойство Text просто установил в MyBindingSource — MyColumn.

тогда тебе нужно изменить соответсвующий дизайнерский код, на следующий:
MyControl.DataBindings.Add("Text", MyBindingSource, "MyColumnName", false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
или
MyControl.DataBindings.Add("Text", MyBindingSource, "MyColumnName", false, DataSourceUpdateMode.OnPropertyChanged, null);
Re[7]: Присвоение полю значения DBNull
От: Андрей Титов http://imul.org
Дата: 17.05.07 15:58
Оценка:
Здравствуйте, kisel, Вы писали:


K>тогда тебе нужно изменить соответсвующий дизайнерский код, на следующий:

K>MyControl.DataBindings.Add("Text", MyBindingSource, "MyColumnName", false, DataSourceUpdateMode.OnPropertyChanged, DBNull.Value);
K>или
K>MyControl.DataBindings.Add("Text", MyBindingSource, "MyColumnName", false, DataSourceUpdateMode.OnPropertyChanged, null);


Теперь, если ввести число а потом его стереть, то при переходе фокуса число введённое прежде восстанавливается
Re: Присвоение полю значения DBNull
От: Poul_Ko Казахстан  
Дата: 18.05.07 02:52
Оценка:
Здравствуйте, Андрей Титов, Вы писали:

АТ>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).


АТ>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).


АТ>Я так понял полю нужно присвоить значение DBNull, а как это сделать?


Это делается примерно так:
        // Создание Binding'а
        Binding b = textBox1.DataBindings.Add("Text", bindingSource1, "Value");
        b.Parse += new ConvertEventHandler(b_Parse);
...
        // Вызывается, когда нужно из введённой строки получить значение
        void b_Parse(object sender, ConvertEventArgs e)
        {
            // Заменяем пустую строку на DBNull
            string valAsString = e.Value as string;
            if (string.IsNullOrEmpty(valAsString))
                e.Value = Convert.DBNull;
        }
Brainbench transcript #6370594
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.