2010-02-25 50 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()并显示类型名称。