2009-05-20 3 views
2

은 참조 : Dropdowns filled with same list itemDropDownList로, 많은 ListItems 및 selectedItem가

추적 및 디버깅의 하루를 보낸 후, 나는 마침내 동일한 항목 컬렉션 3 DropDownLists를 채우는 것은 마지막으로 선택한 항목이 3 개 목록에 표시됩니다 것을 알아 냈다.

이것은 항목의 'selectedness'가 목록의 속성이 아니라 항목의 속성이기 때문에 나타납니다.

그러나 프로그래밍 방식으로 항목을 선택하면 인 것처럼 보입니다.

편집 # 2 : 모두가 틀린 질문에 대답하는 것처럼 보입니다. 다음은 저를 혼란스럽게합니다!

사용자가 컨트롤을 통해 항목을 선택하면 응용 프로그램이 의도 한대로 작동하는 것처럼 보입니다. - 웹 인터페이스에서 3 가지 항목을 선택하면 올바른 3 가지 항목이 DB에 입력됩니다.

아무도 이유가 무엇인지 설명 할 수 있습니까?

편집 : 내가 묻는 질문은 브라우저에서 전혀 작동하지 않는 이유는 무엇입니까?

답변

3

두 개의 서로 다른 DropDownList 컨트롤에 동일한 ListItem을 추가하기 때문입니다. 각 개체에 표시되는 개체는 동일하므로 해당 개체의 값을 변경하면 두 DropDownLists에 모두 반영됩니다.

드롭 다운을 개체 모음을 보는 방법으로 생각하십시오. 드롭 다운을 찔러서 선택한 값을 변경한다고 말하면 컬렉션의 항목을 반복하고 값을 변경합니다. 두 드롭 다운 모두에 동일한 객체 콜렉션을 사용하는 경우 콜렉션의 값을 변경하면 두 드롭 다운 모두 동일한 변경 사항을 볼 수 있습니다.

집에 두 개의 창문이있어 마치 두 개가 같은 집 개를 조심하는 것과 같습니다. 창문 A를보고있는 사람에게 개집을 파랗게 칠하도록 말하면, 창문 B를 바라 보는 사람에게 "개집"을 그리라고 말하지 않았더라도 그는 여전히 파란 개를 보러 갈 것입니다 집.

0

이것은 BindingContext 및 컬렉션과 관련이 있습니다. 당신은 컬렉션의 복사본을 만들고 컬렉션에 바인딩해야합니다. 나는 이것이 어머니 - 자식보기를 더 쉽게하기 위해, 선택된 어머니 요소에 기초하여 정확한 자식 요소를 얻을 수 있도록하기 위해 이루어진 것이라고 생각한다.

컬렉션이 DataTable 인 경우 드롭 다운 목록을 바인딩하면 DefaultView가 사용됩니다. 이를 방지하려면 테이블을 dataviews에 패키지화하십시오.

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