【问题标题】:visual basic asp.net dropDownList not populating with valuesvisual basic asp.net dropDownList 未填充值
【发布时间】:2013-06-21 14:07:26
【问题描述】:

我有一个 asp.net Visual Basic 网站,我正在使用存储过程来获取值以填充下拉列表。

但是,我有两个问题。如果我将填充下拉列表的方法放在页面加载事件中的 If Not IsPostBack 语句中,则整个列表将填充“System.Data.DataViewRow”而不是实际值的项目。如果我把它放在这个'if'语句之外但仍然在我的页面加载事件中,我会得到正确的值,但无论我选择什么,当我离开下拉菜单时,它会恢复到顶部项目而不是所选项目.

我做错了什么??

编辑:我现在按照 Nic 的建议添加了 DataTextField,并按照 Lee Bailey 的建议将该方法放入我的“If Not IsPostBack”事件中。但是,我的下拉菜单仍将所有值显示为“System.Data.DataViewRow”,所以我不知道 Lee 的解决方案是否有效!关于显示值问题的任何其他想法!我已更新下面的代码以反映更改。

视觉基础:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        bodyPanel.Visible = False
        drpRegion_fill()
    End If
End Sub

Protected Sub drpRegion_fill()
    Dim sqlConn As SqlConnection
    sqlConn = New SqlConnection
    sqlConn.ConnectionString = ConfigurationManager.ConnectionStrings("ConnString").ConnectionString
    Dim drpRegionCmd As SqlCommand
    drpRegionCmd = New SqlCommand("getRegionName", sqlConn)
    drpRegionCmd.CommandType = CommandType.StoredProcedure

    Dim drpRegionAdp As SqlDataAdapter
    drpRegionAdp = New SqlDataAdapter(drpRegionCmd)
    Dim drpRegionDs As DataSet
    drpRegionDs = New DataSet

    sqlConn.Open()
    drpRegionAdp.Fill(drpRegionDs)

    With drpRegion
        .DataSource = drpRegionDs
        .DataBind()
        .DataValueField = "regionName"
        .DataTextField = "regionName"
        .SelectedIndex = 0
    End With

    sqlConn.Close()
End Sub

标记:

<asp:Panel ID="panelRegion" runat="server" Height="160px" Width="71%" CssClass="inlineBlock">
<h2>Region:</h2>
<asp:dropDownList runat="server" AutoPostBack="true" ID="drpRegion" />
</asp:Panel>

SQL 过程返回一个两列数据集,“regionID”作为第 1 列,“regionName”作为第 2 列。

我现在已经花了大约两天的时间,尝试了各种不同的东西并阅读了所有我能读到的书!当我执行相同的操作时,我从未在 C# 中遇到过这个问题,而且我一生都无法想到我在 VB 中错过了什么......

【问题讨论】:

  • 设置 DataTextField 有影响吗?
  • 你在哪里设置DataTextField?

标签: asp.net vb.net visual-studio-2010 visual-studio web-applications


【解决方案1】:

您似乎没有设置 DropDownList 的 DataTextField 属性:

 With drpRegion
        .DataSource = drpRegionDs
        .DataValueField = "regionName"
        .DataTextField = "fieldToDisplayAsText"
        .SelectedIndex = 0
        .DataBind()
 End With

来源: MSDN DataTextField

【讨论】:

  • 我已经尝试过了,但它没有解决我的问题,编辑我的原始问题以添加更新的代码。
  • 您是否将 DataTextField 属性设置为正确的值,即 DataTable 中的列名?
  • 是的 - 在我的描述中也添加了有关 proc 的信息。 regionName 是我要显示的列的确切列名...:/
  • 它显示了正确的行数,所以我显然遗漏了其他明显的东西......
  • 在 MSDN 示例中,最后一次调用 DataBind()。所以先尝试设置 DataFields,然后调用 DataBind()。我会修改以反映这一点。
【解决方案2】:

它正在恢复为原始值,因为您在回发后将值重新绑定到下拉列表。更改所选项目会触发回发,因为您将 AutoPostBack 属性设置为 true。只有当它不是回发时,我才会调用 drpRegion_fill() 。设置 Ric 提到的 DataTextField 应该可以解决有关“System.Data.DataViewRow”的问题

【讨论】:

  • 谢谢 - 我已将其移至我的“如果不是 IsPostBack”部分,现在将进行测试
  • 我现在已将调用移至 page_load 事件的“如果不是 IsPostBack”部分,但我不确定它是否有效,因为我现在遇到的所有项目都显示为System.Data.DataViewRow - 尽管我还按照 Ric 的建议添加了 DataTextField 属性?将尝试绕过然后测试...谢谢!
  • 这确实有效,因为我已经听从了 Ric 的所有建议 - 非常感谢!我只能将一个标记为答案:/
猜你喜欢
  • 2016-05-08
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多