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"
我想添加 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"