我有一个下拉列表,它有一个将数据绑定到它的方法:
dropDown.Items.Clear()
dropDown.AppendDataBoundItems = True
Select Case selType
Case SelectionTypes.Empty
dropDown.Items.Insert(0, New ListItem("", ""))
Case SelectionTypes.Any
dropDown.Items.Insert(0, New ListItem("ANY", ""))
Case SelectionTypes.Select
dropDown.Items.Insert(0, New ListItem("Select One", ""))
End Select
BindDropDown(val)
BindDropDown方法只是设置数据源,datakeyname,datavaluename,然后对数据进行数据绑定。
由于我无法避免的原因,我有时必须两次调用此方法。当它被调用两次时,所有数据绑定项都会显示两次,但顶部项(我手动插入的项)只有一次。
即使我清除了两者之间的列表,当我进行两次数据绑定时,ASP是否做了一些奇怪的事情?或者是否必须对viewstate / controlstate执行某些操作?
修改
整个页面,此控件具有EnableViewState =“false”
编辑2
下拉列表位于表单视图中。设置选定值后,我必须重新绑定下拉列表,以防所选值不存在[因为它是非活动用户]。在此之后,formview复制数据绑定项。
答案 0 :(得分:1)
以下是发生的事情: 我的下拉控件在设置所选索引时绑定数据。因此它将DataSource设置为我的值表,并调用DataBind。
当绑定了表单视图时,它会设置选中的索引,该索引会绑定我的下拉列表 HOWEVER ,在此情况发生后,formview会在所有上调用 DataBind() >它的孩子。由于我的下拉列表有AppendDataBoundItems =“True”,它会再次将DataSource中的项添加到下拉列表中。
我的解决方案:
在SelectedIndex属性中调用 DataBind()后,将DataSource设置为null。这样,当Formview调用 DataBind()时,它不会附加任何项目,因此我没有更多重复项。
答案 1 :(得分:0)
尝试这样做:
dropDown.Items.Clear()
BindDropDown(val)
Select Case selType
Case SelectionTypes.Empty
dropDown.Items.Insert(0, New ListItem("", ""))
Case SelectionTypes.Any
dropDown.Items.Insert(0, New ListItem("ANY", ""))
Case SelectionTypes.Select
dropDown.Items.Insert(0, New ListItem("Select One", ""))
End Select