Я понял, что были заданы варианты этого вопроса, и я долгое время изучал их здесь и в других местах, но до сих пор я не могу прийти к решению. Надеюсь, я просто что-то упустил, и кто-то из этого прекрасного сообщества может мне помочь. Я прочитал и попробовал статью MSDN Handling Null Data in Data Source Controls, но также не повезло.GridView DropDownList, обрабатывая нулевые значения
Вот моя ситуация. Я использую EntityDataSource и базу данных SQL Server (если это имеет значение), и у меня есть основная таблица (позволяет называть ее отправлениями), которая ссылается на различные дочерние таблицы через внешний ключ. Например, в пунктах таблицы «Отгрузка» есть столбец «Грузовик», который ссылается на таблицу «Грузовик».
Грузовик не требуется в момент создания Отгрузки. Если пользователь позже редактирует Отгрузку, чтобы добавить Грузовик, все работает отлично. Это делается с помощью DropDownList в GridView поле шаблона, например, так (я извиняюсь, я не знаю, как форматировать этот прелестно - я буду править пост позже, если я могу):
<asp:DropDownList ID="ddlTrucks" runat="server" AutoPostBack="false" AppendDataBoundItems="true"
DataTextField="Number" DataValueField="TruckID" DataSourceID="esrcTrucks"
SelectedValue='<%# Bind("TruckID") %>'>
<asp:ListItem Value="-1" Text="(Select)"></asp:ListItem>
</asp:DropDownList>
Хорошо, поэтому в случае, когда «Грузовик» не был введен во время создания Отгрузки (общий), DropDownList красиво заполняет «(Выбрать)» в качестве выбранного элемента.
ОДНАКО, если Отправка обращается к Грузовику, и этот Грузовик позже удаляется (скажем, он разрушен и больше не является частью флота), вот где я сталкиваюсь с проблемами и получаю «ddlTruck имеет SelectedValue, который недействителен, потому что он не существует в списке элементов. Имя параметра: значение "сообщение об ошибке.
Предпочтительно, я хотел бы избежать этого исключения, так что этого не происходит вообще. Если я должен, однако, есть способ поймать это исключение и «зафиксировать» DDL, чтобы страница могла отображаться, и пользователь мог идти своим путем? Как/где я поймаю это? Итак, я задаю свои вопросы:
- Является ли это проблемой дизайна базы данных? Должно ли обрабатываться удаление связанного объекта
каким-то образом, что я не делаю в настоящее время? - Есть ли способ предотвратить это исключение вообще, , как если бы ни один грузовик не был введен (DDL показывает только «(Выбрать)»)?
- Если мне нужно поймать и обработать это исключение, как и где я буду делать так?
Просто чтобы прояснить, это не требование для DDL, чтобы сохранить данные из удаленной машины. Простое отображение «Выбрать», пустая строка или любое значение по умолчанию будет в порядке. Цель состоит в том, что это не должно разрушать страницу, и пользователь должен иметь возможность при необходимости редактировать другие детали отправки.
Любая помощь была бы принята с благодарностью. Я потратил пару дней на это и не смог заставить ничего работать! Если я могу предоставить дополнительную информацию или если я не знаю, что на моем посту, пожалуйста, дайте мне знать.
Большое спасибо!
Также необходимо ли сохранить груз грузовика, который больше не существует или его необходимо обновить? Я предполагаю, что вы хотите, чтобы страница загружалась, а затем пользователь будет обновлять этот DDL с действующим в настоящее время выбором? Это верно? – Dmase05
Не обязательно, чтобы страница GridView/сохраняла предыдущее значение. Отображение пустой строки или другого значения по умолчанию будет прекрасным, поскольку это не обязательное поле (либо в GridView, либо в самой таблице базы данных). – KevinC