Мне просто нужно было обойти это.Мне нужно было изменить старый код для веб-страницы, написанный для ASP.NET 2.0.Страница использует Telerik RadMenu, элемент управления меню.Этот компонент требует, чтобы корневые элементы имели правильные значения DBNull (для parentID).Поэтому, когда я компилировал старый код, компонент RadMenu доставил мне много проблем.Первые исключения касались ограничений, потом не понимали, какие элементы были корневыми, и все это выглядело ужасно.
Но я решил это, и это то, что у меня сработало.
На странице свойствстолбца ParentID в конструкторе адаптера таблицы, я использовал: - AllowDBNull: true - DefaultValue: -1 (-1 - значение, которое обычно не встречается в этом столбце) Свойство NullValue осталось в «Исключении выброса», как и былоневозможно изменить для меня.
И в коде, использующем значения из табличного адаптера, я использовал эту конструкцию (код VB.NET, а не C #, поскольку этот вопрос помечен):
Dim MenuBarTable As DAL.Page.MenuBarDataTable 'The Table Adapter
MenuBarTable = PageObj.GetMenuBar() 'The generated Get function
MenuBarTable.ParentIDColumn.AllowDBNull = True
For Each row As Page.MenuBarRow In MenuBarTable.Rows
If row.IsParentIDNull() Then
row.SetParentIDNull()
End If
Next
Код, сгенерированный для адаптеров таблиц, генерирует две функции для каждого столбца, которые должны разрешать DBNULL.Они предназначены для использования с NULL, но это неуклюжее решение Microsoft.За кулисами происходит то, что адаптер таблицы будет выводить столбец DefaultValue вместо NULL из функции Get.Я называю это "имитированным NULL" или "поддельным NULL".
Функция IsParentIDNull () фактически проверит, содержит ли строка этот "поддельный NULL", например, DefaultValue столбца, и когда это произойдет, яЯ вставляю правильный DBNull с помощью функции SetParentIDNull ().
Это решение работает для меня, но не очень элегантно и не очень эффективно, но, надеюсь, может помочь кому-то еще.