ASP.NET VB DropdownList

时间:2014-09-30 15:41:36

标签: asp.net vb.net drop-down-menu

简单的问题。

我有一个下拉列表,我想在page_load上设置它的值。

<asp:DropDownList ID="SubmissionTypeDD" runat="server"></asp:DropDownList>

我使用一些数据库值填充此下拉列表,目前为22,17和44

现在我希望page_load上的这个下拉列表的选定值为“17”

SubmissionTypeDD.SelectedValue = "17"

这不起作用,无论如何都默认为最高值。

我试过把它放在“如果IsPostBack = False那么”但没有成功。

这是我用来填充DD的代码:

Dim readIntoTable As New SqlCommand("SELECT DISTINCT submissionTypes FROM dbo.submissionTypes ORDER    BY submissionTypes ASC", conn)
conn.Open()

SubmissionTypeDD.DataSource = readIntoTable.ExecuteReader
SubmissionTypeDD.DataTextField = "submissionTypes"
SubmissionTypeDD.DataBind()

conn.Close()

干杯!

4 个答案:

答案 0 :(得分:0)

PreRenderComplete事件中执行,而不是在页面Load事件中执行此操作。数据绑定通常在之后加载事件时发生,因此将数据库中的值绑定到下拉列表正在替换SelectedValue选项。如果你在PreRender上这样做,数据绑定已经完成,选择将会坚持。

来自documentation

  

<强> PreRenderComplete

     

在设置了DataSourceID属性的每个数据绑定控件之后引发调用其DataBind方法。有关详细信息,请参阅本主题后面的数据绑定控件的数据绑定事件。

此外,整个设计让我闻到了一些东西。数据库中的项目是动态的,或者它们不是动态的。如果它们是动态的,你怎么知道使用&#34; 17&#34;?您可能最好在表格中添加一个列,您可以指定默认值,只需对结果进行排序,以便默认位于顶部或使用其他代码强制根据该列选择它。如果项目不动态,为什么还要烦扰数据库呢?只需硬编码整个列表。我知道数据驱动的声音更好,但它也是性能消耗,而YAGNI。

答案 1 :(得分:0)

尝试使用ListItem并将Selected设置为True

Dim liValue As ListItem = SubmissionTypeDD.Items.FindByValue("17")
If (liValue IsNot Nothing) Then
   liValue.Selected = True
 End If

答案 2 :(得分:0)

确保在下拉列表中出现的任何数据绑定后设置selectedValue属性。如果在数据绑定之前设置selectedValue属性,那么将使用新数据绑定覆盖该属性。

如果您不确定如何正确填充下拉列表,请参阅以下优秀答案: Databind a dropdownlist

答案 3 :(得分:0)

很抱歉浪费每个人的时间。我在数据库中设置的值有尾随的空格,我没有修剪过,所以它实际上就像“77”而不是“77”