Проблема с GridView, Bind () и DropDownList - PullRequest
1 голос
/ 19 февраля 2010

Я обновляю существующий сайт ASP .NET. Этот сайт имеет собственный класс элемента управления сеткой, который расширяет элемент управления GridView, добавляя несколько функций. Многие страницы сайта используют встроенную функцию декларативного двустороннего связывания, встроенную в базовый GridView, то есть шаблоны столбцов выполняют вызовы Bind (), чтобы данные могли отображаться и обновляться автоматически. Это работает нормально в большинстве случаев. Однако при связывании элементов управления DropDownList возникает проблема.

Недавно мне пришлось добавить функцию, позволяющую пометить записи в некоторых таблицах как «закрытые», то есть на них больше нельзя ссылаться, если новые записи вставляются в другие таблицы.

При редактировании строки сетки данных, в которой есть DropDownList дочерних записей, которые могут быть закрыты, свойство SelectedValue может быть связано с идентификатором, которого нет в списке. Это вызывает исключение ArgumentOutOfRange. Я просто хочу, чтобы в DropDownList по умолчанию не было выбора, если запись закрыта и поэтому отсутствует в списке.

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

Я могу программно установить выбранный индекс DropDownList в событии RowDataBound. Но я не могу найти способ обновления значения при сохранении существующей функциональности обновления.

Актуальный вопрос:

Есть ли способ расширить DropDownList, чтобы он игнорировал недопустимые значения для свойства SelectedValue? Единственный пример, который я видел до сих пор, не работает. Я думаю, что DropDownList кэширует значение в том случае, если у него еще не установлено свойство DataSource, поэтому переопределения свойства SelectedValue недостаточно.

В качестве альтернативы, если есть способ использовать событие OnRowUpdating для ручного добавления данных в обновление, тогда это будет нормально. Я попытался добавить значения в словарь NewValues ​​класса GridViewUpdateEventArgs, но, похоже, он не работает. Обратите внимание, что сетки привязаны к спискам объектов, а не к производным элементам управления DataSourceControl.

Любая помощь будет оценена. Спасибо.

1 Ответ

2 голосов
/ 22 февраля 2010

Если кому-то интересно, думаю, я решил эту проблему, переопределив метод PerformDataBinding и перехватив там исключение ArgumentOutOfRangeException. Я подозреваю, что свойство SelectedValue может также потребоваться переопределить, если порядок, в котором связаны два свойства, может различаться.

...