tags:

views:

52

answers:

2

Using VB.Net

I want to fill a combobox with table values by using 3 tier Architecture

Code.

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"))

Above code is running, But am getting a value in combobox as "System.Data.SQLclinet.SQL"

It in not displaying a data.

There was something wrong in my code.

Need vb.net code Help

+2  A: 

Hi. Sorry I forgot to test my code. Anyway I did simulate your case and found out you can't get datareader result in your UI since is must have been closed on the DAL layer (since you returned the datareader object). The other way you can achieve this is by using a database and bind it on your combobox control. I did a little revision of your code and tried it and found it working. Here is what i've done:

On the DAL layer:

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

On the BLL layer:

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

And on the UI Layer

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

I tested it and found working (of couse with my own connection string and different field and table on the select statement since I don't have your DB :))

Jojo Sardez
@Jojo - Is not working, It showing error
Gopal
@Gopal - I made modifications to the code try it out :)
Jojo Sardez
@Jojo - Showing error in DAL as "input array is longer than the number of columns in this table"
Gopal
A: 

You just have to set DisplayMember to "Name". By default the control calls ToString() and displays type name.

alga