none
listbox solo seleccionar por letra

    Pregunta

  • Buen dia tengo una pregunta tengo un listbox con varios datos, pero no se si se pueda hacer que solo aparezcan los que inician con alguna letra que nosotros quieramos ejemplo que aparezcan solo las que inicien con "M", alguna ayuda?
    miércoles, 14 de diciembre de 2016 6:34

Respuestas

  • Falta saber como llenas el listbox  si lo llenas a partir de una lista podrías hacerlo así:

    Dim listaItems As New List(Of String)(New String() {"A1", "A2", "B1"})
    Dim letra As String = "M"
    ListBox1.DataSource = listaItems.Where(Function(s) s.StartsWith(letra)).ToList()

    o usando los ítems del propio ListBox:

    Dim letra As String = "M"
    Dim lista As List(Of String) = ListBox1.Items.Cast(Of String).ToList()
    ListBox1.DataSource = lista.Where(Function(s) s.StartsWith(letra)).ToList()

    miércoles, 14 de diciembre de 2016 7:41
  • Hola:
    En un Form con 1 ListBox, copia y pega el siguiente código

    Public Class FrmFiltrado
        Private mDataTable As New DataTable("Prueba")

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ' Creamos una columna, y la añadimos al objeto DataTable.
            mDataTable.Columns.Add(New DataColumn("Columna", GetType(String)))
            mDataTable.Columns("Columna").MaxLength = 10
            'Cargamos datos en datatable
            Dim lDataRow As DataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Pedro"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Manuel"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Jose"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Carlos"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Angel"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Ander"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Zulema"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Zacarias"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Fernando"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Francisco"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Delfin"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Josefa"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Maria"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Felisa"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Felix"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Enrique"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Carmelo"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Julian"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Ignacio"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Luis"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Luisa"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Ernesto"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Manuela"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Javier"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Carmela"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Andres"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Lorenzo"
            mDataTable.Rows.Add(lDataRow)
            With Me.ListBox1
                .DataSource = mDataTable
                .DisplayMember = "Columna"
            End With
        End Sub

        Private Sub ListBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ListBox1.KeyPress
            Dim lcCaracter As Char = e.KeyChar
            If (Not (Char.IsLetter(lcCaracter))) Then
                ' Si no es una letra, al control ListBox le asignamos su DataTable.
                ListBox1.DataSource = mDataTable
                Return
            End If
            Dim ldtTemporal As DataTable = DirectCast(ListBox1.DataSource, DataTable)
            ' Creamos una copia del objeto DataTable
            Dim ldtCopia As DataTable = ldtTemporal.Copy()
            ' Filtramos el objeto DataTable
            ldtCopia.DefaultView.RowFilter = "Columna Like '" & lcCaracter & "*'"
            ' Le asignamos el nuevo origen de datos al control ListBox.
            ListBox1.DataSource = ldtCopia
        End Sub
    End Class

    P.D.
    Si se teclea un NO caracter, se carga el listbox con todos los datos

    Un saludo desde Bilbo
    Carlos

    jueves, 15 de diciembre de 2016 9:30

Todas las respuestas

  • Falta saber como llenas el listbox  si lo llenas a partir de una lista podrías hacerlo así:

    Dim listaItems As New List(Of String)(New String() {"A1", "A2", "B1"})
    Dim letra As String = "M"
    ListBox1.DataSource = listaItems.Where(Function(s) s.StartsWith(letra)).ToList()

    o usando los ítems del propio ListBox:

    Dim letra As String = "M"
    Dim lista As List(Of String) = ListBox1.Items.Cast(Of String).ToList()
    ListBox1.DataSource = lista.Where(Function(s) s.StartsWith(letra)).ToList()

    miércoles, 14 de diciembre de 2016 7:41
  • Los lleno con contenido propio, no se mucho de programación pero si es una función que deseo saber, trate de acomoda pero me marca error lista.Where
    miércoles, 14 de diciembre de 2016 18:19
  • Hola:
    En un Form con 1 ListBox, copia y pega el siguiente código

    Public Class FrmFiltrado
        Private mDataTable As New DataTable("Prueba")

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ' Creamos una columna, y la añadimos al objeto DataTable.
            mDataTable.Columns.Add(New DataColumn("Columna", GetType(String)))
            mDataTable.Columns("Columna").MaxLength = 10
            'Cargamos datos en datatable
            Dim lDataRow As DataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Pedro"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Manuel"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Jose"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Carlos"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Angel"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Ander"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Zulema"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Zacarias"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Fernando"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Francisco"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Delfin"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Josefa"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Maria"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Felisa"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Felix"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Enrique"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Carmelo"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Julian"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Ignacio"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Luis"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Luisa"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Ernesto"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Manuela"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Javier"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Carmela"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Andres"
            mDataTable.Rows.Add(lDataRow)
            lDataRow = mDataTable.NewRow
            lDataRow.Item("Columna") = "Lorenzo"
            mDataTable.Rows.Add(lDataRow)
            With Me.ListBox1
                .DataSource = mDataTable
                .DisplayMember = "Columna"
            End With
        End Sub

        Private Sub ListBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ListBox1.KeyPress
            Dim lcCaracter As Char = e.KeyChar
            If (Not (Char.IsLetter(lcCaracter))) Then
                ' Si no es una letra, al control ListBox le asignamos su DataTable.
                ListBox1.DataSource = mDataTable
                Return
            End If
            Dim ldtTemporal As DataTable = DirectCast(ListBox1.DataSource, DataTable)
            ' Creamos una copia del objeto DataTable
            Dim ldtCopia As DataTable = ldtTemporal.Copy()
            ' Filtramos el objeto DataTable
            ldtCopia.DefaultView.RowFilter = "Columna Like '" & lcCaracter & "*'"
            ' Le asignamos el nuevo origen de datos al control ListBox.
            ListBox1.DataSource = ldtCopia
        End Sub
    End Class

    P.D.
    Si se teclea un NO caracter, se carga el listbox con todos los datos

    Un saludo desde Bilbo
    Carlos

    jueves, 15 de diciembre de 2016 9:30