#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