Как подавить ArgumentOutOfRangeException, когда SelectedValue не существует в наборе данных - PullRequest
1 голос
/ 06 апреля 2011

У меня есть выпадающий список, который использует источник данных для заполнения. Возвращенный набор данных представляет собой список активных местоположений. Мы не удаляем данные, поэтому мы делаем мягкое удаление, используя столбец bDeleted в таблице.

В некоторых случаях при заполнении ddl я получаю ошибку ArgumentOutOfRangeException при привязке SelectedValue, поскольку местоположение может быть деактивировано и не возвращается в списке.

Мне кажется, должен быть способ подавить это, а не просто выбирать значение.

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

Любая помощь / предложения будут оценены.

Спасибо Patrick

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Вы должны избегать того, чтобы кто-то мог «удалить» местоположение, которое все еще используется, или «удалить» связанные записи (пометить их как удаленные как bDeleted).

Вы не должны использовать исключения для обработки нормального поведения.

Вы должны изменить команду SelectCommand для DropDownList, чтобы получить также местоположения, которые «удалены», но также еще где-то используются.Затем вы можете проверить, удалено ли местоположение и применить другой css-класс к удаленным элементам ListItems (Locations):

DropDownList1.Items[1].Attributes.Add("class", "deleted");

0 голосов
/ 06 апреля 2011

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

Combobox.FindByText(someText).Selected = true;

или

Combobox.FindByValue(someValue).Selected = true;
...