2017-06-06 148 views
0

我想檢索數據並顯示在ComboBox中,但它顯示爲空白。如何使用來自Access數據庫的記錄填充組合框

這是我的代碼:

Imports System.Data.OleDb 

Public Class frmAirwaybill 

    Private Sub frmAirwaybill_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim cm As OleDbCommand = New OleDbCommand("select acc_no from tblshipper order by acc_no") 
     cm.Connection = DBconnection() 
     Dim dr As OleDbDataReader = cm.ExecuteReader 
     Do While (dr.Read()) 
      txtAccountNo.Items.Add(dr.Item("acc_no")) 
     Loop 
     dr.Close() 
     DBconnection.Close() 
    End Sub 
End Class* 

txtAccountNo是ComboBox

我想要什麼,加載窗體時,是從我的數據庫加載登錄號。我怎麼做?

這是顯示ComboBox空白值的截圖:

its blank, i want they show the data in combo box

我的數據庫連接正常。

這是我的模塊文件連接

Public Function DBconnection() As OleDbConnection 

     Dim con As New OleDb.OleDbConnection 
     Dim constring As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\SmartshipG2.mdb" 
     con = New OleDb.OleDbConnection(constring) 
     con.Open() 
     Return con 

End Function 

回答

1

首先要注意的事情是,你還沒有打開連接。這可能是根本原因。

這就是說,要利用DataTable並設置.DisplayMember.ValueMember性能ComboBox.DataSource你更好的結合。

我也會考慮實施Using

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

最後,考慮給你的ComboBox一個更好的前綴。 txt通常用於TextBox控件。我使用cmb,而其他人可能使用cbx。所以在這種情況下cmbAccountNo似乎更適合。

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

Dim dt As New DataTable 
Using con As OleDbConnection New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\SmartshipG2.mdb"), 
     cmd As New OleDbCommand("SELECT [acc_no] FROM [tblshipper] ORDER BY [acc_no]", con) 
    con.Open() 

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

cmbAccountNo.DataSource = dt 
cmbAccountNo.DisplayMember = "acc_no" 
cmbAccountNo.ValueMember = "acc_no" 
相關問題