2010-02-25 2 views
0

Использование VB.NetПолучение значения в COMBOBOX проблемы

Я хочу, чтобы заполнить выпадающий со значениями таблицы, используя 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"

Это не в d воспроизведение данных.

Что-то не так в моем коде.

Нужна vb.net код Помощь

ответ

1

К сожалению, я забыл проверить свой код. В любом случае, я смоделировал ваше дело и выяснил, что вы не можете получить результат данных в своем пользовательском интерфейсе, поскольку он должен быть закрыт на уровне DAL (поскольку вы вернули объект datareader). Другой способ добиться этого - использовать базу данных и привязать ее к элементу управления combobox. Я немного пересмотрел ваш код и попробовал его и нашел, что он работает. Вот что я сделал:

На 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 Layer

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

я проверил он и нашел работу (из couse с моей собственной строкой соединения и с другим полем и таблицей в предложении select, так как у меня нет вашей БД :))

+0

@Jojo - Не работает, он показывает ошибку – Gopal

+0

@Gopal - я внесла изменения в код, попробуйте :) –

+0

Показаны ошибки в DAL, поскольку «входной массив длиннее числа столбцов в этой таблице» – Gopal

0

Вам просто нужно установить DisplayMember на "Name". По умолчанию элемент управления вызывает ToString() и отображает имя типа.