2010-02-25 45 views
0

值使用VB.Net獲取在組合框的問題

我想用3層架構

代碼,以填補表值的組合框。

DAL

Public Function Combo1(ByVal cmb1select As string) As SqlDataReader 

     cmd = New SqlCommand("Select Name from table1", con) 
     dr = cmd.ExecuteReader 
     While (dr.Read()) 
      cmb1select = (dr("Name")) 
     End While 
     Return dr 

End Function 

BLL

Public Function combo1(ByVal cmb1select As String) As SqlDataReader 

     dr = New New_DAL().Combo1("cmb1select") 
     Return dr 

End Function 

UL

combobox1.Items.Add(New New_BLL().combo1("cmb1select")) 

上面的代碼運行,但我在組合框中獲取的值作爲 「System.Data.SQLclinet.SQL」

它在沒有顯示數據。

我的代碼有問題。

需要vb.net代碼幫助

回答

1

對不起,我忘了測試我的代碼。無論如何,我沒有模擬你的情況,發現你不能在你的UI中獲得datareader結果,因爲必須在DAL層上關閉(因爲你返回了datareader對象)。另一種方法是通過使用數據庫並將其綁定到組合框控件上。我對你的代碼做了一些修改,然後嘗試了一下,發現它工作正常。這裏是我做了什麼:

在DAL層:

Public Class New_DAL 

Public Function Combo1(ByVal cmb1select As String) As DataTable 

    'Not included in the snippet a assume it is coded this way 
    Dim cmd As SqlClient.SqlCommand 
    Dim con As SqlClient.SqlConnection 
    Dim dr As SqlClient.SqlDataReader 
    con = New SqlClient.SqlConnection("your_connection_string") 
    con.Open() 
    '---------- 
    'New Code 
    Dim dt As New DataTable 
    dt.Columns.Add("Name") 
    '---------- 

    cmd = New SqlClient.SqlCommand("Select Name from table1", con) 
    dr = cmd.ExecuteReader 
    While (dr.Read()) 
     'old code 
     'cmb1select = (dr("Name")) 
     'New Code 
     dt.Rows.Add(dr("Name")) 
     '---------- 
    End While 

    'Not included in the snippet a assume it is coded this way 
    con.Close() 
    '---------- 

    'old code 
    'Return dr 
    Return dt 

End Function 


End Class 

在BLL層:

Public Class New_BLL 

Public Function combo1(ByVal cmb1select As String) As DataTable 
    'New code 
    Dim dt As DataTable 
    '---------- 

    'Old code 
    'dr = New New_DAL().Combo1("cmb1select") 

    dt = New New_DAL().Combo1("cmb1select") 

    'Old Code 
    'Return dr 
    Return dt 

End Function 


End Class 

而且在UI層

ComboBox1.DataSource = New New_BLL().combo1("cmb1select") 
ComboBox1.DisplayMember = "Name" 

我測試它發現工作(與我自己的連接字符串和select語句上的不同字段和表的couse,因爲我沒有你的數據庫: ))

+0

@Jojo - 不工作,它顯示錯誤 – Gopal 2010-02-25 11:20:45

+0

@Gopal - 我對代碼進行了修改嘗試:) – 2010-02-26 03:02:02

+0

在DAL中顯示錯誤,因爲「輸入數組長度超過了此表中的列數」 – Gopal 2010-02-28 07:13:02

0

您只需將DisplayMember設置爲「名稱」即可。默認情況下,控件調用ToString()並顯示類型名稱。