none
Filtrar Text por 2 parámetros

    Pregunta

  • Hola, tengo un TextBox el cual se encarga de buscar en un datagrid mediante la columna "Nombre", quiero agregar ademas que me busque también en el mismo textbox por "Código". Al agregar la linea para buscar por "Código" me busca solamente por "Código" y no por "Nombre".

    ¿Como puedo solucionarlo para buscar por ambos? primero por código y después por nombre no los 2 a la vez por ejemplo, que el contenido del text sea "abc123" sino que sea "123" o "abc" ¿Puede ser haciendo 2 mismos eventos TextChanged?

    Esto es lo que hice:

     Private Sub txtbuscar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtbuscar.TextChanged
    
            Dim Buscar As String = DirectCast(sender, TextBox).Text.ToUpper
    
            DataGridView1.CurrentCell = Nothing
    
            For Each Fila As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow).
              Where(Function(f) Not f.IsNewRow)
                Fila.Visible = Convert.ToString(Fila.Cells("Nombre").Value).ToUpper.Contains(Buscar)
                Fila.Visible = Convert.ToString(Fila.Cells("Codigo").Value).ToUpper.Contains(Buscar)
            Next
    End sub

    Saludos!

    viernes, 28 de abril de 2017 14:59

Respuestas

  • Hola Federico32113

    Qué tal si utilizar un radiobutton y le das posibilidad al usuario que escoga por que lo dese buscar?

    agregar un radio buscar por nombre y otro buscar por codigo, entonces tu programación sería

    Private sub txtbuscar_textchangued......
    
    If rbbuscarcporcocido.checked = True Then
    ' programas para buscar por codigo
    End If
    
    If rbbuscarpornombre.checked = True Then
    ' programas para buscar por nombre
    End If
    ....
    ....
    End Sub

    Saludos!


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    • Propuesto como respuesta Joyce_ACModerator viernes, 28 de abril de 2017 16:04
    • Marcado como respuesta Federico32113 viernes, 28 de abril de 2017 19:30
    viernes, 28 de abril de 2017 15:06

Todas las respuestas

  • Hola, tengo un TextBox el cual se encarga de buscar en un datagrid mediante la columna "Nombre", quiero agregar ademas que me busque también en el mismo textbox por "Código". Al agregar la linea para buscar por "Código" me busca solamente por "Código" y no por "Nombre".

    ¿Como puedo solucionarlo para buscar por ambos? primero por código y después por nombre no los 2 a la vez por ejemplo, que el contenido del text sea "abc123" sino que sea "123" o "abc" ¿Puede ser haciendo 2 mismos eventos TextChanged?

    Esto es lo que hice:

     Private Sub txtbuscar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtbuscar.TextChanged
    
            Dim Buscar As String = DirectCast(sender, TextBox).Text.ToUpper
    
            DataGridView1.CurrentCell = Nothing
    
            For Each Fila As DataGridViewRow In DataGridView1.Rows.Cast(Of DataGridViewRow).
              Where(Function(f) Not f.IsNewRow)
                Fila.Visible = Convert.ToString(Fila.Cells("Nombre").Value).ToUpper.Contains(Buscar)
                Fila.Visible = Convert.ToString(Fila.Cells("Codigo").Value).ToUpper.Contains(Buscar)
            Next
    End sub

    Saludos!



    miércoles, 26 de abril de 2017 17:49
  • Fila.Visible = Convert.ToString(Fila.Cells("Nombre").Value).ToUpper.Contains(Buscar) And  Convert.ToString(Fila.Cells("Codigo").Value).ToUpper.Contains(Buscar)
    
    'o
    
    Fila.Visible = Convert.ToString(Fila.Cells("Nombre").Value).ToUpper.Contains(Buscar) Or  Convert.ToString(Fila.Cells("Codigo").Value).ToUpper.Contains(Buscar)
    
    'o
    
    Fila.Visible = Convert.ToString(Fila.Cells("Nombre").Value).ToUpper.Contains(Buscar) Xor  Convert.ToString(Fila.Cells("Codigo").Value).ToUpper.Contains(Buscar)
    

    Quieres que sea visible cuando ambas son true, cuando al menos una sea true, cuando sólo una sea true

    O, si quieres lo contrario, pones la expresión entre paréntesis y antepones un Not

    miércoles, 26 de abril de 2017 18:01
  • Quiero que se ejecute cuando al menos una sea TRUE por lo tanto agregue el "Or", pero no entiendo porque me muestra otros registros los cuales no coinciden con los valor que estoy buscando. Cuando anteriormente si funcionaba si buscaba por una sola columna.

    miércoles, 26 de abril de 2017 18:13
  • No sé. De todas formas, deberías proporcionar un texto para el campo "Nombre" y otro diferente para el campo "Codigo". No puedes usar Buscar para ambas consultas.
    miércoles, 26 de abril de 2017 18:24
  • Me hubieras dicho antes entonces, veré si encuentro otra manera para usar un solo textbox
    viernes, 28 de abril de 2017 3:27
  • Hola Federico32113

    Qué tal si utilizar un radiobutton y le das posibilidad al usuario que escoga por que lo dese buscar?

    agregar un radio buscar por nombre y otro buscar por codigo, entonces tu programación sería

    Private sub txtbuscar_textchangued......
    
    If rbbuscarcporcocido.checked = True Then
    ' programas para buscar por codigo
    End If
    
    If rbbuscarpornombre.checked = True Then
    ' programas para buscar por nombre
    End If
    ....
    ....
    End Sub

    Saludos!


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    • Propuesto como respuesta Joyce_ACModerator viernes, 28 de abril de 2017 16:04
    • Marcado como respuesta Federico32113 viernes, 28 de abril de 2017 19:30
    viernes, 28 de abril de 2017 15:06
  • Gracias por la idea, si no encuentro otra solución la implementare.

    Saludos!

    viernes, 28 de abril de 2017 15:43