ComboBox 显示重复值

ComboBox displays duplicate values

我想添加 ComboBox 的项目。我已成功添加项目,但 ComboBox 重复项目 。为什么?

这是我的代码:

Public Sub load_consigneecode()
    Dim con As OleDbConnection = New OleDbConnection(constring)
    con.Open()
    Dim sql As String = "select con_code from TblConsignee order by con_code"
    Dim cmd As New OleDbCommand(sql, con)
    Dim myreader As OleDbDataReader = cmd.ExecuteReader()

    While myreader.Read()
        cmbCode.Items.Add(myreader(0).ToString)
    End While

    myreader.Close()
    con.Close()
End Sub

这是结果:

在我的table:

我要检查的第一件事是确保您没有添加两次

我建议的第二件事是:

cmbCode.Items.Clear()

在添加项目之前的函数开头

Public Sub load_consigneecode()
    Dim con As OleDbConnection = New OleDbConnection(constring)
    con.Open()
    Dim sql As String = "select con_code from TblConsignee order by con_code"
    Dim cmd As New OleDbCommand(sql, con)
    Dim myreader As OleDbDataReader = cmd.ExecuteReader()

    'add this in code
    cmbCode.Items.Clear();
    While myreader.Read()
        cmbCode.Items.Add(myreader(0).ToString)
    End While

    myreader.Close()
    con.Close()
End Sub

否则在您的 SQL 查询中使用 distinct

您可能没有在添加新项目之前清除 ComboBox 中的项目:

cmbCode.Items.Clear()

也就是说,您最好使用 DataTable 绑定到 ComboBox.DataSource 并设置 .DisplayMember.ValueMember 属性。

我也会考虑实施 Using:

Sometimes your code requires an unmanaged resource, such as a file handle, a COM wrapper, or a SQL connection. A Using block guarantees the disposal of one or more such resources when your code is finished with them. This makes them available for other code to use.

经过更改,您的代码将如下所示:

Dim dt As New DataTable
Using con As OleDbConnection New OleDbConnection(constring),
      cmd As New OleDbCommand("SELECT [con_code] FROM [TblConsignee] ORDER BY [con_code]", con)
    con.Open()

    dt.Load(cmd.ExecuteReader())
End Using

cmbCode.DataSource = dt
cmbCode.DisplayMember = "con_code"
cmbCode.ValueMember = "con_code"