【问题标题】:Dropdownlist loaded from function or method从函数或方法加载的下拉列表
【发布时间】:2026-01-24 09:35:01
【问题描述】:

我有一个我经常使用的下拉列表。 我写了一个方法来加载这个下拉列表。 虽然当我调用该方法时,只传递了项目的文本部分。 方法是这样的

Public Shared Function ddlLoadResumes() As DropDownList
    Dim connString As String = ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString
    Dim conn As SqlConnection = New SqlConnection(connString)
    Dim ddSelectResumeList As New DropDownList
    Dim dtResumes As New DataTable()

    Dim comm As SqlCommand = New SqlCommand("usr_SelectResumeList", conn)
    comm.CommandType = CommandType.StoredProcedure
    comm.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = Membership.GetUser().UserName

    Try
        Dim daResumes As New SqlDataAdapter(comm)
        conn.Open()
        daResumes.Fill(dtResumes)

        ddSelectResumeList.DataSource = dtResumes
        ddSelectResumeList.DataTextField = "ResumeName"
        ddSelectResumeList.DataValueField = "Res_ID"
        ddSelectResumeList.DataBind()


        ' Handle the error
    Catch ex As Exception
    Finally
        conn.Close()

    End Try


    Return ddSelectResumeList

End Function

这就是我的称呼

ddSelectResume.DataSource = MailClass.ddlLoadResumes.Items
ddSelectResume.DataBind()

Dim ltitem As ListItem
        For Each ltitem In ddSelectResume.Items
            Response.Write(ltitem.Value + "-----" + ltitem.Text)
        Next   returns only the text part

我需要 DataTextField 和 DataValueField。 提前谢谢你

【问题讨论】:

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


    【解决方案1】:

    这似乎是一种奇怪的方法。解决您的问题的一件事是将 ddSelectResume 设置为等于您的 Function 返回的 DropDownList 对象:

    ddSelectResume = MailClass.ddlLoadResumes
    
    Dim ltitem As ListItem
            For Each ltitem In ddSelectResume.Items
                Response.Write(ltitem.Value + "-----" + ltitem.Text)
            Next
    

    虽然我认为更好的方法是让“ddlLoadResumes 返回 DataTable (dtResumes),并将其设置为 ddSelectResumes 的数据源(您仍然必须设置 DataTextField 和 DataValueField 属性)。

    【讨论】:

    • 你的意思是它不起作用,@Tzvei?也许您可以尝试加载 Items 集合?喜欢ddSelectResume.Items = MailClass.ddlLoadResumes.Items
    • 我的意思是ddSelectResume在bind()之后是空的。 ddSelectResume 需要一个数据源
    • @Tzvei 你为什么要打电话给Bind()?它已经绑定在ddlLoadResumes
    • 我在我的第一篇文章中指定:ddSelectResume.DataSource = MailClass.ddlLoadResumes.Items ddSelectResume.DataBind() 这适用但仅适用于 TextField
    • 好的,我按照您的建议使用了 dataAdapter,它工作正常。我会更喜欢我的初始方法(更优雅)