Asp.net DropDownList、ListItems和SelectedItem

Asp.net DropDownList、ListItems和SelectedItem,asp.net,drop-down-menu,selected,Asp.net,Drop Down Menu,Selected,另见: 经过一天的跟踪和调试,我终于发现用相同的项目集合填充3个DropDownLists会导致最后选择的项目出现在所有3个列表中 这似乎是由于项目的“选择性”是项目的属性,而不是列表的属性 但是,只有以编程方式选择项目时,才会出现这种情况 编辑#2:因为每个人似乎都在回答错误的问题:以下是让我困惑的问题 当用户通过控件选择项目时,应用程序似乎可以正常工作。-在Web界面中选择3个不同的项目会在数据库中输入正确的3个不同的项目 有人能解释为什么会这样吗 编辑:我要问的问题是为什么它在浏览器中工作

另见:

经过一天的跟踪和调试,我终于发现用相同的项目集合填充3个DropDownLists会导致最后选择的项目出现在所有3个列表中

这似乎是由于项目的“选择性”是项目的属性,而不是列表的属性

但是,只有以编程方式选择项目时,才会出现这种情况

编辑#2:因为每个人似乎都在回答错误的问题:以下是让我困惑的问题

当用户通过控件选择项目时,应用程序似乎可以正常工作。-在Web界面中选择3个不同的项目会在数据库中输入正确的3个不同的项目

有人能解释为什么会这样吗


编辑:我要问的问题是为什么它在浏览器中工作?

这与BindingContext和集合有关。您需要复制集合并绑定到这些集合。我认为这样做是为了使母子视图更容易,您可以根据所选的母子元素获得正确的子元素

如果您的集合是DataTable,则将dropdownlist绑定到它将使用它的DefaultView。为了避免这种情况,将表打包到DataView中


obj.DataSource=newdataview(dataTable,“,”,DataViewRowState.CurrentRows)

这是因为您正在向两个不同的DropDownList控件添加相同的ListItem。每个下拉列表中显示的对象都是相同的,因此更改该对象的值将反映在两个下拉列表中

可以将下拉列表看作是查看对象集合的一种方式。你拨动下拉列表并告诉它改变它的选择值实际上只会导致它在集合中的项目中循环并改变它们的选择值。如果对两个下拉列表使用相同的对象集合,则更改集合中的值将导致两个下拉列表看到相同的更改

这就像一个房子里有两扇窗户,两扇窗户都面向同一个狗窝。如果你告诉一个从窗户a望出去的人去把狗屋漆成蓝色,即使你没有告诉从窗户B望出去的人把“他的”狗屋漆成蓝色,他仍然会看到一个蓝色的狗屋