我正在尝试在我的应用程序中使用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
提前致谢。
答案 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
这将导致数据绑定仅在第一次请求页面时发生,而不是在单击按钮或其他回发操作后发生。