简单的问题。
我有一个下拉列表,我想在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()
干杯!
答案 0 :(得分:0)
在PreRenderComplete
事件中执行,而不是在页面Load
事件中执行此操作。数据绑定通常在之后加载事件时发生,因此将数据库中的值绑定到下拉列表正在替换SelectedValue
选项。如果你在PreRender上这样做,数据绑定已经完成,选择将会坚持。
<强> 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”