2

另请参阅:填充相同列表项的下拉列表

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

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

但是,这似乎在以编程方式选择项目时出现。

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

当用户通过控件选择项目时,应用程序似乎按预期工作。-- 在 Web 界面中选择 3 个不同的项目会导致在 DB 中输入正确的 3 个不同的项目。

谁能解释为什么会这样?

编辑:我要问的问题是为什么它在浏览器中完全有效?

4

2 回答 2

3

这是因为您将相同的 ListItem 添加到两个不同的 DropDownList 控件。每个对象中显示的对象是相同的,因此更改该对象的值将反映在两个 DropDownLists 中。

将下拉列表视为查看对象集合的一种方式。您戳下拉菜单并告诉它更改它的选定值实际上只会导致它循环遍历其集合中的项目并更改它们的选择值。如果您对两个下拉菜单使用相同的对象集合,则更改集合中的值将导致两个下拉菜单看到相同的更改。

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

于 2009-05-21T20:13:26.260 回答
0

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

如果您的集合是 DataTable,则将下拉列表绑定到它将使用它的 DefaultView。为避免这种情况,请将表格打包在数据视图中;

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

于 2009-05-20T14:45:31.310 回答