【问题标题】:How can I populate a dropdown list with data?如何使用数据填充下拉列表?
【发布时间】:2009-06-09 15:36:07
【问题描述】:

我有一个dropdownlist,我想用一个特定的值和特定的文本来填充它。我没有使用datasource,但我正在手动建立连接并在代码中检索数据。我怎样才能填充这个dropdownlist?如果我用datareader 读取数据并增加一个数组,我只能得到值或文本。这是我到目前为止所拥有的,但它是完全错误的:

//connection string etc goes here
Dbcmd2.CommandText = "select dept,deptname from table"

Dim dr As SqlClient.SqlDataReader
    dr = Dbcmd2.ExecuteReader
    Dim i As Integer
    Dim arydept As New arraylist
    While dr.Read
       arydept.Add(dr1("dept"))
    End While

    ddldept.datasource = arydept
    ddldept.DataTextField = ????????
    ddldept.DataValueField = dr("dept")
    ddldept.DataBind()

如何在不必为Department 创建类对象的情况下使其工作?无论如何还是应该创建类对象?

【问题讨论】:

    标签: asp.net vb.net visual-studio visual-studio-2008


    【解决方案1】:

    有什么特别的原因可以让你以正常的方式做到这一点吗?

    Dbcmd2.CommandText = "select dept,deptname from table"
    Dim dr As SqlClient.SqlDataReader = Dbcmd2.ExecuteReader
    While dr.Read() 
      ddldept.Items.Add(new ListItem(dr("deptname"),dr("dept"))
    End While
    ' ddldept is now populated with all items from the query
    

    【讨论】:

    • UPS,数据访问代码和查看代码在同一上下文中,这只是演示代码 - 不要在家里这样做孩子!!!
    • @khebbie:嗯,很明显。但我认为 Eric 更关心填充组合框而不是数据访问。如果他想将它包装到另一个对象中进行封装,这取决于他。不过,他应该这样做。你听到了吗,埃里克?
    • @Welbog 我以为你会知道这一点,只是有些孩子可能会飞过并看到这个并想:“哦!,这就是这样做的方法” - 所以我添加了警告...不要冒犯!
    • IMO 他和他的雇主应该受到随后的痛苦,但无论如何添加警告都是好的形式。
    • 这很好用,但是它是 ListItem 而不是 Item。谢谢你。我以前用过这个……只是忘记了。我一直在寻找字典类型的答案,但这会很好。
    【解决方案2】:

    您已经在使用阅读器,因此只需将其弹出到 DataTable 并绑定:

    //connection string etc goes here
    Dbcmd2.CommandText = "select dept,deptname from table"
    
    Dim dr As SqlClient.SqlDataReader
    dr = Dbcmd2.ExecuteReader
    Dim myData as DataTable
    If dr.HasRows Then
        myData.Load(dr)
    End If
    
    ddldept.datasource = myData
    ddldept.DataTextField = myData("myTextField")
    ddldept.DataValueField = myData("dept")
    ddldept.DataBind()
    

    【讨论】:

    • 我真的很喜欢这个主意! +1。从来没有想过这个
    【解决方案3】:

    您可以简单地创建列表项并将它们添加到您的下拉列表中,而不是使用 datasource/databind() 方法。

     dr = Dbcmd2.ExecuteReader
        Dim i As Integer
        Dim arydept As New arraylist
    
        ddldept.Items.Clear()
        While dr.Read
           ddldept.Items.Add(new ListItem(dr1("dept"), dr1("dept")))
        End While
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      ddldept.Items.Clear()
      
      While dr.Read
         ListItem item = New ListItem()
         item.Text = dr("deptname").ToString()
         item.Value = dr("dept").ToString()
      
         ddldept.Items.Add(item)
      End While
      

      【讨论】:

        【解决方案5】:

        如果您使用字典对象,那么您可以存储名称和值,而不是使用 ArrayList。

        应该这样做

        Dim All As New Dictionary(Of String, String)
        All.Add("Test", 1)
        All.Add("Test2", 2)
        test.DataSource = All
        test.DataTextField = "Key"
        test.DataValueField = "Value"
        test.DataBind()
        

        【讨论】:

        • 我喜欢这个想法,将来会使用它。我不知道如何使用字典。 +1
        猜你喜欢
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 2021-11-26
        • 2017-08-05
        • 2020-04-08
        • 1970-01-01
        相关资源
        最近更新 更多