【问题标题】:ASP.NET VB DropdownListASP.NET VB 下拉列表
【发布时间】:2014-11-25 07:37:57
【问题描述】:

简单的问题。

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

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

我使用一些数据库值填充这个下拉列表,目前是 22、17 和 44

现在我希望这个下拉菜单在 page_load 上的选择值为“17”

SubmissionTypeDD.SelectedValue = "17"

这不起作用,它默认为最高值。

我尝试将其放入“If IsPostBack = False Then”,但没有成功。

这是我用来填写 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()

干杯!

【问题讨论】:

  • 你能展示你如何填充下拉列表的代码吗?
  • 添加了DD的代码
  • 填写DD的代码在哪里?
  • 在我上面的原始问题中......
  • 对不起,我措辞不好。 DD 代码在哪里触发? Page_Load?

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


【解决方案1】:

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

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

【讨论】:

  • 我认为这不是解决方案,因为我从数据库中获取数据,因此它是动态的。
  • 只需将“17”替换为您数据库中的值即可。
  • OP 中的整个设计让我开始闻起来有些味道。数据库中的项目要么是动态的,要么不是。如果它们是动态的,你怎么知道使用“17”?如果不是,为什么还要麻烦数据库?
  • @JoelCoehoorn 是的,我开始怀疑他们是否足够了解 ASP.NET 以实施我们的建议。
  • 现在将其作为我的答案的一部分。
【解决方案2】:

PreRenderComplete 事件中执行此操作,而不是在页面Load 事件中。数据绑定通常在加载事件之后 发生,因此将数据库中的值绑定到下拉列表将替换您的SelectedValue 选择。如果您改为在 PreRender 上执行此操作,则数据绑定已经完成,并且选择将保持不变。

来自documentation

PreRenderComplete

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

此外,整个设计让我开始闻起来有些异味。数据库中的项目要么是动态的,要么不是。如果它们是动态的,你怎么知道使用“17”?您可能最好在表中添加一列以指示默认值,然后对结果进行排序,以便默认值位于顶部或使用其他代码强制根据该列选择它。如果这些项目不是动态的,为什么还要打扰数据库呢?只需对整个列表进行硬编码。我知道数据驱动听起来更好,但它也会消耗性能和 YAGNI。

【讨论】:

  • 不幸的是,这似乎也没有任何作用。
  • @levis84 我的错误:我只检查了documentation,应该是PreRenderComplete。 PreRender 也发生在数据绑定之前。我会更新我的答案。
【解决方案3】:

确保在下拉列表中发生任何数据绑定之后设置 selectedValue 属性。如果您在数据绑定之前设置 selectedValue 属性,那么它将被新的数据绑定覆盖。

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

【讨论】:

    【解决方案4】:

    很抱歉浪费大家的时间。我在数据库中设置的值有我没有修剪的尾随空格,所以它实际上类似于“77   ”而不是“77”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多