Возможно с сбросом CascadingDropBoxList: S - PullRequest
0 голосов
/ 25 ноября 2011

спасибо за чтение, это немного долго, но я надеюсь, что кто-то может мне помочь!

У меня есть следующие настройки:

В веб-приложении у меня есть панель обновления

Внутри этой панели обновлений у меня есть две обычные панели и набор из двух переключателей: radio1 и radio2.

На Panel1 у меня есть 4 выпадающих списка (давайте назовем это DDL group1), загружаемых с помощью расширителя CascadingDropDown, то есть первый блок вызывает второй, и так далее. Во всех 4 DDL включен автоответчик. Это означает, что каждый раз, когда я выбираю значение, вызывается метод SelectedIndexChanged, который загружает данные из базы данных на основе информации, выбранной в последнем DDL.

На Panel2 у меня такая же настройка, за исключением того, что у меня только 2 DDL (назовем это DLL группа 2), также связанных как каскадные выпадающие списки. У них также есть методы SelectedIndexChanged.

Группы DLL 1 и 2 не зависят друг от друга.

Для переключателей есть метод OnSelectedIndexChanged для каждой кнопки.

При каждом изменении я устанавливаю значение SelectedValue первого CascadingDropDown (на обеих панелях) равным нулю (или ничего в VB).

Когда я выбираю радио1, панель 1 видна, панель 2 невидима. С первого раза все работает как положено.

Когда я выбираю радио2, панель 2 видна, панель 1 невидима. Опять же, на первом ходу все работает как положено.

Тогда возникает проблема: если я нахожусь в радио 2, и иду на radio1, и панель 1 появляется, казалось бы, сброшены CascadingDropDowns из-за SelectedValue = nothing (null), за исключением того, что в первом DDL, когда я выберите мой первый выбор, второй DropDownList активирован, однако метод SelectedIndexChanged не запускается для первого DDL, вместо этого запускается метод последнего выбранного DDL, и поскольку ящики не загружены, я получаю ошибку.

Чтобы быть более понятным, вот небольшой пример:

Предположим, я нажал на радио1. Panel1 с Group1 показывает вверх.

Группа1 имеет ящики Город, Магазин, Отдел, Полка.

Когда я выбираю город, Магазин загружается, когда я выбираю магазин, загружается отдел и т. Д.

Загружаемый список загружает элементы. Другими словами, если я выберу город, в окне будут показаны ВСЕ предметы в данном городе.

Если я выберу Магазин, в списке отобразятся все товары в данном магазине и т. Д.

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

Теперь предположим, что я нажимаю radio2. Появляется Panel2 с Group2.

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

Предположим, я выбрал Город X и полку y.

Затем я возвращаюсь к радио1, панель 1 отображается так же, как и группа 1.

Помните, что в этой пометке я установил SelectedValue = none. Таким образом, список выглядит так, как будто его сбросили.

За исключением того, что когда я выбираю свой город, в моем списке ничего не отображается. Вместо запуска метода citySelectIndexChanged выполняется метод DepartmentSelectedIndexChanged, поскольку он был последним активным DDL, и, естественно, список не загружается должным образом, поскольку в настоящее время, поскольку CascadingDDL был сброшен, окно отдела не было загружен.

Я уже несколько дней ломаю голову и никак не могу понять ... какие-нибудь идеи?

1 Ответ

0 голосов
/ 25 ноября 2011

Похоже, что решение состоит в том, чтобы не сбрасывать SelectedValue первого каскадного раскрывающегося списка в null в переключателе метода OnSelectedIndexChanged.

Если панели независимы, не должно быть никакого вреда для сохранения ранее выбранного значения, если пользователь переключается между переключателями, верно?

...