visual basic asp.net dropDownList没有填充值

时间:2013-06-21 14:07:27

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

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

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

我做错了什么?

编辑:我现在按照Nic的建议添加了DataTextField,并将该方法放入我的'If Not IsPostBack'事件中,如Lee Bailey所建议的那样。但是,我的下拉列表仍然显示所有值为'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中错过了什么......

2 个答案:

答案 0 :(得分:2)

看起来您没有设置DropDownList的DataTextField属性:

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

源: MSDN DataTextField

答案 1 :(得分:1)

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

的问题