ASP.NET - DropDown DataBinding(Rebind?)

时间:2010-06-09 13:26:02

标签: .net asp.net vb.net

我有一个下拉列表,它有一个将数据绑定到它的方法:

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复制数据绑定项。

2 个答案:

答案 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