2009-05-20 10 views
2

Siehe auch: Dropdowns filled with same list itemDropdownlist, Listitem und SelectedItem

Nach einem Tag des Aufspürens und Debuggen ich endlich herausgefunden, dass mit der gleichen Sammlung von Gegenständen 3 Dropdownlists bevöl bewirkt, dass das letzte ausgewählte Element in allen drei Listen erscheinen.

Dies scheint aufgrund der 'Selectedness' eines Elements, das eine Eigenschaft des Elements ist, und nicht eine Eigenschaft der Liste zu sein.

Dies scheint jedoch der Fall nur, wenn ein Element programmgesteuert ausgewählt ist.

bearbeiten # 2: Wie jeder scheint die falsche Frage zu beantworten: Das Folgende ist, was mich verwirrt!

Die Anwendung scheint ordnungsgemäß zu funktionieren, wenn der Benutzer Elemente über das Steuerelement auswählt. - Die Auswahl von 3 verschiedenen Elementen in der Weboberfläche führt dazu, dass 3 korrekte Einträge in der Datenbank eingegeben werden.

Kann jemand erklären, warum das der Fall ist?

EDIT: Die Frage, die ich stelle, ist, warum funktioniert es überhaupt im Browser?

Antwort

3

Dies liegt daran, dass Sie dasselbe ListItem zu zwei verschiedenen DropDownList-Steuerelementen hinzufügen. Das Objekt, das in jedem von ihnen angezeigt wird, ist das gleiche, so dass sich der Wert dieses Objekts in beiden DropDownLists widerspiegelt.

Denken Sie an die Drop-downs als nur eine Art, eine Sammlung von Objekten zu betrachten. Sie stoßen das Dropdown und sagen ihm, dass es den ausgewählten Wert ändern soll. Es führt nur dazu, dass es die Elemente in seiner Sammlung durchläuft und ihren Wert auswählt. Wenn Sie für beide Dropdown-Listen dieselbe Sammlung von Objekten verwenden, führt das Ändern der Werte in der Sammlung dazu, dass beide Dropdowns die gleiche Änderung sehen.

Es ist wie zwei Fenster in einem Haus zu haben, die beide auf das gleiche Hundehaus blicken. Wenn du einer Person sagen würdest, die aus Fenster A schaut, um das Hundehaus blau zu malen, obwohl du der Person, die aus Fenster B schaut, nicht erzählt, dass sie "sein" Hundehaus malen soll, wird er immer noch einen blauen Hund sehen Haus.

0

Dies hat mit BindingContext und der Sammlung zu tun. Sie müssen Kopien der Sammlung erstellen und an diese binden. Ich denke, dies wurde getan, um Mutter-Kind-Ansichten zu erleichtern, wo Sie das richtige Kindelement basierend auf dem ausgewählten Mutterelement erhalten können.

Wenn es sich bei Ihrer Sammlung um eine DataTable handelt, verwenden Sie eine Dropdownliste, um sie mit DefaultView zu verknüpfen. Um dies zu vermeiden, packen Sie die Tabelle in Datenansichten.

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

Verwandte Themen