DropDownList, ListItems и SelectedItem - PullRequest
2 голосов
/ 20 мая 2009

См. Также: Выпадающие списки заполнены тем же элементом списка

После дня трассировки и отладки я наконец понял, что при заполнении 3 DropDownLists одной и той же коллекцией элементов последний выбранный элемент появляется во всех 3 списках.

По-видимому, это связано с тем, что «выбранность» элемента является свойством элемента, а не свойством списка.

Однако, похоже, это имеет место только , когда элемент выбран программно.

edit # 2: Поскольку все, кажется, отвечают на неправильный вопрос: вот что меня смущает!

Приложение работает должным образом, когда пользователь выбирает элементы с помощью элемента управления. - Выбор 3 разных элементов в веб-интерфейсе приводит к тому, что в БД вводятся правильные 3 разных элемента.

Кто-нибудь может объяснить, почему это так?

РЕДАКТИРОВАТЬ: Вопрос, который я задаю, почему он вообще работает в браузере?

Ответы [ 2 ]

3 голосов
/ 22 мая 2009

Это потому, что вы добавляете один и тот же элемент ListItem к двум различным элементам управления DropDownList. Объект, который отображается в каждом из них, одинаков, поэтому изменение значения этого объекта будет отражено в обоих DropDownLists.

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

Это похоже на два окна в доме, которые выходят на один и тот же собачий дом. Если вы скажете человеку, смотрящему из окна А, пойти и покрасить собачий дом в синий цвет, даже если вы не скажете человеку, смотрящему из окна В, нарисовать «свой» собачий дом, он все равно увидит синего пса дом.

0 голосов
/ 20 мая 2009

Это связано с BindingContext и коллекцией. Вам нужно сделать копии коллекции и привязать к ним. Я думаю, что это было сделано, чтобы упростить представления мать-ребенок, где вы можете получить правильный дочерний элемент на основе выбранного элемента матери.

Если ваша коллекция является DataTable, привязка к ней выпадающего списка будет использовать его DefaultView. Чтобы избежать этого, упакуйте таблицу в dataviews;

obj.DataSource = new DataView (dataTable, "", "", DataViewRowState.CurrentRows);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...