【问题标题】:Create Listbox Values from Database从数据库创建列表框值
【发布时间】:2015-06-15 14:34:52
【问题描述】:

这是我第二次使用 VB.net,所以我不确定语言。 我正在尝试从标题为“类别”的表列中创建列表框值。有重复,所以我试图只显示每个类别一次。我必须这样做,因为用户可以添加更多类别,这意味着我的列表框值需要动态更新。

我不确定我是否正确地执行此过程:

Protected Sub CategoryListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CategoryListBox.SelectedIndexChanged

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""*******"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)

    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT classid, Addate, username, category, description FROM t_classifieds", conn)
    Dim OracleDataAdapterAds As OleDbDataAdapter = New OleDbDataAdapter
    OracleDataAdapterAds.SelectCommand = ClassifiedStr
    Dim DsAds As DataSet = New DataSet
    DsAds.Clear()
    OracleDataAdapterAds.Fill(DsAds, "t_classifieds")

    CategoryListBox.DataTextField = "category"
    CategoryListBox.DataValueField = "category"
    CategoryListBox.DataSource = DsAds
    CategoryListBox.DataMember = "t_classifieds"
    CategoryListBox.DataBind()

    Dim Categories As String
    Dim CategoryID

    For Each dr As DataRow In DsAds.Tables("t_classifieds").Rows
        Categories = dr("category").ToString()
        CategoryID = dr("classid").ToString()

        CategoryListBox.Items.Add(Categories)

    Next dr

    conn.Close()
End Sub

我查看了其他示例,并尝试镜像它们,但我的列表框中没有打印任何内容。

如果我使用预定义的 Dim 值,我的代码的第二个版本可以工作,但由于某种原因,我没有获得数据库连接来显示数据库类别列表。

第二版:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    FillList()

End Sub

Private Sub FillList()

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""MSDAORA.1"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)
    Dim data_reader As OleDbDataReader
    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT * FROM t_classifieds ", conn)
    Dim Categories
    conn.Open()
    data_reader = ClassifiedStr.ExecuteReader()
    CategoryListBox.Items.Clear()
    If data_reader.HasRows Then
        Do While data_reader.Read()
            Categories = data_reader.Item("category")
            'CategoryListBox.Items.Add(New ListItem(Categories))
            CategoryListBox.Items.Add(Categories.ToString())
        Loop
    End If
    data_reader.Close()
    data_reader = Nothing
    ClassifiedStr.Dispose()
    ClassifiedStr = Nothing
    conn.Close()
    conn.Dispose()


    'Dim dWorkDate As Date = CDate("01.01.2014")
    'While dWorkDate < Date.Today
    'CategoryListBox.Items.Add(dWorkDate.ToString("dd.MM.yyyy"))
    'dWorkDate = dWorkDate.AddDays(1)
    'End While
End Sub

【问题讨论】:

    标签: asp.net vb.net listbox webpage


    【解决方案1】:

    为类别选择DISTINCT 值:

    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT DISTINCT category FROM t_classifieds", conn)
    
    '...
    
    CategoryListBox.DataSource = DsAds.Tables("t_classifieds")
    CategoryListBox.DataTextField = "category"
    CategoryListBox.DataValueField = "category"
    

    顺便说一句,您无需在New DataSet 上致电Clear

    【讨论】:

    • 我按照您的建议做了,DisplayMember 给了我一个错误,指出它不能用于列表框。此外,我的列表框仍然没有显示任何内容
    • 哦,ASP。网。我怎么会错过这些标签。查看更新。
    • 我看到了更新,但没有打印出来。不知道是什么问题:/
    • 设置断点、调试并确保您实际获取数据并将其存储在您的 DataSet 中。
    • 我添加了答案,因为我的旧代码确实有效,但您的 Sql 是我解决问题的方法。只是出于好奇,我在第一个类别列表之后有一个空格。你知道是什么原因造成的吗?
    【解决方案2】:

    意识到我的旧代码有效,但我需要@Keith Sql 代码。

    If Not IsPostBack Then
            If Not CategoryListBox Is Nothing Then
    
    
                Dim conn As OleDbConnection = New OleDbConnection("Provider=""****"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)
    
                'Display All Classified Ads listed in the Database based on the following format/order
                'Date    Name    Home Phone Number     Description
    
                Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT DISTINCT category FROM t_classifieds", conn)
                Dim OracleDataAdapterAds As OleDbDataAdapter = New OleDbDataAdapter
                OracleDataAdapterAds.SelectCommand = ClassifiedStr
                Dim DsAds As DataSet = New DataSet
                DsAds.Clear()
                OracleDataAdapterAds.Fill(DsAds, "t_classifieds")
                CategoryListBox.DataSource = DsAds
                CategoryListBox.DataMember = "t_classifieds"
                CategoryListBox.DataBind()
            End If
        End If
    

    我唯一的问题是一个随机空间:/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2016-02-29
      • 2020-06-01
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多