Не удается получить текст нескольких выбранных элементов в ListBox VB.NET, поскольку он имеет тип datarowview

У меня есть listbox1 в VB 2010, который привязан к источнику данных и отображает значения из набора данных. Я связал его с помощью Конструктора - т.е. не через код. Я просто выбрал источник данных в свойствах listbox1.

Теперь я хочу получить выбранные значения. Когда я оставляю список как одиночный выбор, тогда ListBox1.SelectedValue.ToString выполняет эту работу - он дает мне текст выбранного элемента.

Но мне нужно, чтобы разрешить множественный выбор. Это мой код:

    Dim items As ListBox.SelectedObjectCollection
    items = ListBox1.SelectedItems
    For Each i As String In items
        MsgBox(i)
    Next

И это ошибка, которую я получаю:

Conversion from type 'DataRowView' to type 'String' is not valid.

Я пробовал несколько разных способов получить значения выбранных элементов, но, похоже, нет простого способа сделать это. Это невозможно? Нужно ли объявлять новый набор данных и программно заполнять список или что-то в этом роде?


person user961627    schedule 23.11.2012    source источник


Ответы (3)


Внезапно я думаю, что вы можете сделать:

Dim items As ListBox.SelectedObjectCollection
items = ListBox1.SelectedItems
For Each i As ListViewItem In items
    MsgBox(i.Value.ToString())
Next
person bendataclear    schedule 23.11.2012
comment
Нет, это не работает. Та же проблема: невозможно преобразовать объект типа «System.Data.DataRowView» в тип «System.Windows.Forms.ListViewItem». - person user961627; 23.11.2012

Проверьте мой вопрос и ответ. Это позволяет вам разбивать отдельные записи из базы данных на списки.

Добавьте 2 списка и текстовое поле в форму, затем скопируйте этот код. Вам нужно будет заменить свои собственные записи сервера, базы данных и т. д.

Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections
Imports System.Data.SqlClient

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' get the data
    Dim SQLConnectionString As String = "Data Source=HL605\RIVWARE;Database=RIVWARE;Integrated Security=true;"
    Dim mySQLConnection As New SqlConnection(SQLConnectionString)

    ' Populate the list box using an array as DataSource. 
    mySQLConnection.Open()
    Dim SQLDataTable As New System.Data.DataTable

    'Create new DataAdapter
    Dim mySQLDataAdapter = New SqlDataAdapter("SELECT * FROM [Rivware].[dbo].[RivetTypes]", mySQLConnection)
    mySQLDataAdapter.Fill(SQLDataTable)
    ListBox1.DataSource = SQLDataTable
    ListBox1.DisplayMember = "RivetType"

    ' remove validation data from list
    Dim Count As Integer
    Dim X As Integer
    'get the column of data to search for
    For Count = 0 To ListBox1.DataSource.Columns.Count - 1
        X = InStr(ListBox1.DataSource.Columns.Item(Count).ToString, "Name")
        If X <> 0 Then Exit For
    Next
    ' now search for any invalid rows, in that column. those containing "---"
    Dim TheTable As DataTable = CType(ListBox1.DataSource, DataTable)
    Dim theRow As DataRow() = TheTable.Select()
    Dim RowNumber As Integer
    For RowNumber = 0 To UBound(theRow) - 1
        If theRow(RowNumber).Item(Count).ToString <> "---" Then
            ' data is OK so transer it to the other listbox
            ListBox2.Items.Add(theRow(RowNumber).Item(Count - 1).ToString)
        End If
    Next

    ListBox2.ClearSelected()
End Sub 'NewNew

Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged
    TextBox1.Text = ListBox2.SelectedItem.ToString()
End Sub
End Class 'ListBoxSample3
person A Paul Savage    schedule 07.01.2016

person    schedule
comment
Эй, гм... еще один вопрос на самом деле - это дает мне значение элементов списка... как я могу получить внешний текст элемента списка? - person user961627; 25.11.2012
comment
спасибо @ user961627, в любом случае, если у вас есть более одного значения, такого как valuemember, возьмите строку представления данных, а затем нужный элемент. например: MessageBox.Show(drv.Row.Item(1)) - person Ruwanka Madhushan; 05.02.2014