vb.net Как отобразить значения базы данных в списке?

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Я пытаюсь отобразить несколько строк с двумя значениями столбцов в списке, поэтому, когда пользователь выбирает опцию, у них есть немного дополнительной информации.

Это должно выглядеть так:

ej. 3 Лучшая покупка

Я использую тот же метод для вывода данных в мои GridViews, но он ничего не отображает в списке. Каков правильный метод вывода данных из БД в список.

Функции класса управления SQL

 Public Function ExecQuery(query As String) As DataTable

    Dim DBDT = New DataTable
    Using DBCon As New SqlConnection(ConStr),
            DBCmd As New SqlCommand(query, DBCon)
        Params.ForEach(Sub(p) DBCmd.Parameters.Add(p))
        Params.Clear()
        DBCon.Open()
        DBDT.Load(DBCmd.ExecuteReader)
    End Using
    Return DBDT
End Function

'Add Params
Public Sub AddParam(Name As String, Value As Object)
    Dim NewParam As New SqlParameter(Name, Value)
    Params.Add(NewParam)
End Sub
  

Как я пытаюсь добавить данные в список

 Protected Sub DivisionListBox_DataBinding(sender As Object, e As EventArgs) Handles DivisionListBox.DataBinding

    Try
        dt = SQL.ExecQuery("Select STR_GRP_ID, GROUP_DESC
                            FROM Store_Group_Desc ")

    Catch ex As Exception
        MsgBox(ex.Message)
        Exit Sub
    End Try

    DivisionListBox.DataSource = dt
    DivisionListBox.DataBind()
End Sub
  

Комментарии:

1. Взгляните на DataMember и ValueMember и посмотрите, поможет ли это.

2. Я считаю, что это asp.net применение. Пожалуйста, добавьте этот тег.

3. Просто имейте в виду, что в списке или выпадающем списке может быть столбец PK и столбец отображения. Но в поле со списком (выпадающем списке) или в списке отображается ТОЛЬКО один столбец. Таким образом, предлагаемый ниже ответ «сконцентрирует» несколько столбцов. Как правило, поле со списком и список отображаются в одном столбце. Единственным широко распространенным исключением является MSAccess, который имеет как список с несколькими столбцами, так и поля со списком (что-то, в чем я путаюсь vb.net ). Для списка с несколькими столбцами используйте таблицу данных, но для поля со списком приведенное ниже предложение использовать строки, которые «объединяют» несколько столбцов, — это ваш единственный выбор.

Ответ №1:

Что я бы сделал, так это вернул STR_GRP_ID , а также создал столбец с псевдонимами, который объединил поля STR_GRP_ID и GROUP_DESC .

Затем вы должны привязать DataTable к списку, как вы делаете, но указав, что DisplayMember списка — это ваш псевдонимный столбец, а ValueMember — идентификатор:

 Try
    dt = SQL.ExecQuery("Select STR_GRP_ID, CONCAT_WS(' ', STR_GRP_ID, GROUP_DESC GROUP_DESC) AS DisplayText FROM Store_Group_Desc;")
Catch ex As Exception
    MessageBox.Show(ex.Message)
    Return
End Try

With DivisionListBox
    .DataSource = dt
    .DisplayMember = "DisplayText"
    .ValueMember = "STR_GRP_ID"
End With
  

Ответ №2:

Я не думаю DataBinding , что событие когда-либо будет запущено в вашем коде. Вы можете установить точку останова внутри события и посмотреть, срабатывает ли оно когда-либо.

Я решил использовать Page.Load событие для заполнения списка. Я отделил код пользовательского интерфейса, который фактически заполняет поле списка, от кода доступа к данным.

Я попросил сервер выполнить работу по созданию строки, которую вы хотите отобразить. Я предположил, что поле id было каким-то типом числового поля, поэтому я передал его в varchar. Затем добавил пробел и поле описания. Это новое поле выбора называется IDDesc.

IDDesc — это имя поля, которое я хочу отобразить в списке.

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        FillListBox()
    End If
End Sub

Private Sub FillListBox()
    Dim ListBoxData = GetListBoxData()
    ListBox1.DataTextField = "IDDesc"
    ListBox1.DataSource = ListBoxData
    ListBox1.DataBind()
End Sub

Private Function GetListBoxData() As DataTable
    Dim DBDT = New DataTable
    Dim Query = "Select Cast(STR_GRP_ID As varchar)   ' '   GROUP_DESC As IDDesc
                        FROM Store_Group_Desc "
    Using DBCon As New SqlConnection(ConStr),
            DBCmd As New SqlCommand(Query, DBCon)
        DBCon.Open()
        DBDT.Load(DBCmd.ExecuteReader)
    End Using
    Return DBDT
End Function