当使用数据源和数据绑定来设置下拉列表中的项目时 - 索引始终是第一个项目的值

时间:2012-01-18 15:23:20

标签: asp.net vb.net

我正在尝试在我的应用程序中使用datasource和bind来设置查询结果的下拉列表。下拉列表正确填充(在集合中显示每个不同的type_name)但稍后当我使用ddltype.selectedvalue时 - 我总是从数据集中的第一个项获取值。这是代码。

        if ds.hasRows = true
        ddlType.DataValueField = "type_id"
        ddlType.DataTextField = "type_name"
        ddlType.DataSource = ds
        ddlType.DataBind()
        end if

然后我会使用以下代码尝试获取所选值

        Dim typeID = ddlType.SelectedValue

我运行查询以获取SQL服务器上的数据集并获得以下结果 - 但每次使用上面的dim语句时,即使选择了类型2,该值也会设置为812。下面是填充名为ds的sqldatareader的查询的结果。

type_id : type_name
___________________
812     : type one

813     : type two

提前致谢。

1 个答案:

答案 0 :(得分:1)

根据你问题中的信息,我没有看到任何错误。

但是基于人们用这种模式犯下的常见错误,我猜你可能会在每次回发中运行ddlType.DataBind()。因此,用户单击按钮或类似的东西来触发回发,并且在单击处理程序检查值之前重新绑定DDL。重新绑定将selectedvalue设置回默认值。

编辑:Page_Load中的数据绑定代码只能运行一次。一种方法是包装数据绑定代码......

    If Not IsPostBack Then
        If ds.hasRows = True Then
            ddlType.DataValueField = "type_id"
            ddlType.DataTextField = "type_name"
            ddlType.DataSource = ds
            ddlType.DataBind()
        End If
    End If

这将导致数据绑定仅在第一次请求页面时发生,而不是在单击按钮或其他回发操作后发生。