У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).
Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).
Я так понял полю нужно присвоить значение DBNull, а как это сделать?
Здравствуйте, Андрей Титов, Вы писали:
АТ>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).
АТ>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).
АТ>Я так понял полю нужно присвоить значение DBNull, а как это сделать?
А какой тип данных у твоего поля?
Здравствуйте, kisel, Вы писали:
K>Здравствуйте, Андрей Титов, Вы писали:
АТ>>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).
АТ>>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).
АТ>>Я так понял полю нужно присвоить значение DBNull, а как это сделать? K>А какой тип данных у твоего поля?
Здравствуйте, Андрей Титов, Вы писали:
АТ>Здравствуйте, kisel, Вы писали:
K>>Здравствуйте, Андрей Титов, Вы писали:
АТ>>>У меня есть текстовое поле связанное через BindingSource с числовым полем в таблице (может принимать значение NULL).
АТ>>>Первичное значение у поля NULL, но если ввести в поле число, а потом стереть, то там уже не null значение а пустая строка, и запись уже не добавить (поле числовое).
АТ>>>Я так понял полю нужно присвоить значение DBNull, а как это сделать? K>>А какой тип данных у твоего поля?
АТ>Тип данных Double
если Double то как оно может принимаь значение Null?
Или ты используешь типизированные DataSet-ы?
Здравствуйте, Андрей Титов, Вы писали:
АТ>> если Double то как оно может принимаь значение Null? АТ>> Или ты используешь типизированные DataSet-ы?
АТ>Да DataSet'ы типизированные
АТ>(извиняюсь что сразу не описал этого)
1) MyDataSet.MyDataTable[0].Set<NameColumn>Null() — студия генерирует такой метод
2) MyDataSet.MyDataTable[0]["NameColumn"] = DBNull.Value;
Но похоже тебе нужно не это а в чё1м именно проявляется "и запись уже не добавить (поле числовое)."?
Выпадает какой то Exception или как то по другому?
K>1) MyDataSet.MyDataTable[0].Set<NameColumn>Null() — студия генерирует такой метод K>2) MyDataSet.MyDataTable[0]["NameColumn"] = DBNull.Value;
Ну я так понимаю это подойдёт когда запись уже существует в DataSet, в моём случае её там ещё нет — т.е. BindingSource видимо содержит её где-то у себя
K>Но похоже тебе нужно не это а в чё1м именно проявляется "и запись уже не добавить (поле числовое)."? K>Выпадает какой то Exception или как то по другому?
Просто невозможно перевести фокус с этого поля куда-либо ещё, ни даже закрыть форму, но если снова ввести число то все становится нормально, т.е. это повидимому из-за того что пустое поле — не NULL и не число, поэтому переход блокируется.
Здравствуйте, Андрей Титов, Вы писали:
K>>Но похоже тебе нужно не это а в чё1м именно проявляется "и запись уже не добавить (поле числовое)."? K>>Выпадает какой то Exception или как то по другому?
АТ>Просто невозможно перевести фокус с этого поля куда-либо ещё, ни даже закрыть форму, но если снова ввести число то все становится нормально, т.е. это повидимому из-за того что пустое поле — не NULL и не число, поэтому переход блокируется.
Binding к контролу как реализован?
Здравствуйте, Андрей Титов, Вы писали:
АТ>Здравствуйте, 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);
Здравствуйте, Андрей Титов, Вы писали:
АТ>У меня есть текстовое поле связанное через 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)
{
// Заменяем пустую строку на DBNullstring valAsString = e.Value as string;
if (string.IsNullOrEmpty(valAsString))
e.Value = Convert.DBNull;
}