2017-06-08 137 views
0

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

這是結果:

enter image description here

在我的表:

enter image description here

回答

1
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查詢中使用不同

1

我會檢查的第一件事是確保你不添加兩次

我會recomened把它做的第二件事:

cmbCode.Items.Clear() 

在函數之前開始加入項目

+0

我看到...功能開始之前,我們要清除的項目.. –

2

你可能不清除的項目在ComboBox添加新的之前:

cmbCode.Items.Clear() 

這就是說,你最好使用DataTable並設置.DisplayMember.ValueMember特性結合到ComboBox.DataSource

我也會考慮實施Using

有時你的代碼需要非託管資源,如文件句柄,COM包裝或SQL連接。使用塊可以保證在您的代碼完成後處置一個或多個這樣的資源。這使它們可供其他代碼使用。

有了改變,你的代碼會是這個樣子:

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"