none
Filtrar Datagridview con textbox

    Pregunta

  • Hola a todos tengo un problema, con el filtro de un datagridview, en el tengo varios campos entre ellos, primer nombre, segundo nombre, apellido paterno, y materno. El tema es que no puedo realizar el filtro cuando uno estos campos ejemplo: select (primer_nombre +'  '+segundo_nombre) as nombre. me dice que el campo nombre no existe. si hago el filtro por cualquier campo, lo realiza bien pero lo que necesito es unir estos campos y que queden solo como nombre. les dejo el codigo.

    Private Sub txt_Buscar_TextChanged(sender As System.Object, e As System.EventArgs) Handles txt_Buscar.TextChanged
            
            Dim filtro As String = CType(sender, TextBox).Text
            If filtro.Trim() <> String.Empty Then  'Si no es vacío filtra
                filtrarDatos(filtro)
            End If
        End Sub
    
        Public Sub filtrarDatos(ByVal buscar As String)
            Try
                Using con As New SqlConnection(My.Settings.Conexion_Rendiciones)
                    Dim query = "SELECT (Primer_Nombre +' '+ Segundo_Nombre +' '+ Apellido_Paterno+' '+ apellido_materno) as Nombre, Direccion, Telefono, Contraseña, Nivel, Valor_Hora as [Valor Hora] FROM Tbl_Trabajador WHERE Nombre like @filtro"
    
                    Dim adapter As New SqlDataAdapter(query, con)
                    adapter.SelectCommand.Parameters.AddWithValue("@filtro", String.Format("%{0}%", buscar))
    
                    Dim table As New DataTable
                    adapter.Fill(table)
    
                    Dgv_Trabajadores.DataSource = table
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    miércoles, 15 de febrero de 2017 15:36

Respuestas

  • adriian.91,

    No, no puedes referenciar al ALIAS de una columna que corresponde a una expresión, por lo menos no desde la cláusula WHERE. Debes escribir la misma expresión en la cláusula WHERE:

    SELECT 
        (Primer_Nombre + ' ' + Segundo_Nombre + ...) AS Nombre, 
        --... 
    WHERE 
        (Primer_Nombre + ' ' + Segundo_Nombre + ...) LIKE @filtro

    Una solución para evitar escribir la expresión en varias partes es implementar una columna calculada en la tabla [Tbl_Trabajador]:

    ALTER TABLE dbo.Tbl_Trabajador ADD NombreCompleto AS 
        (Primer_Nombre + ' ' + Segundo_Nombre + ...)
    GO
    


    Con la columna calculada la consulta de selección se vuelve simple:

    SELECT NombreCompleto, ... WHERE NombreCompleto LIKE @filtro


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator miércoles, 15 de febrero de 2017 16:46
    • Marcado como respuesta adriian.91 miércoles, 15 de febrero de 2017 17:04
    miércoles, 15 de febrero de 2017 15:58

Todas las respuestas

  • adriian.91,

    No, no puedes referenciar al ALIAS de una columna que corresponde a una expresión, por lo menos no desde la cláusula WHERE. Debes escribir la misma expresión en la cláusula WHERE:

    SELECT 
        (Primer_Nombre + ' ' + Segundo_Nombre + ...) AS Nombre, 
        --... 
    WHERE 
        (Primer_Nombre + ' ' + Segundo_Nombre + ...) LIKE @filtro

    Una solución para evitar escribir la expresión en varias partes es implementar una columna calculada en la tabla [Tbl_Trabajador]:

    ALTER TABLE dbo.Tbl_Trabajador ADD NombreCompleto AS 
        (Primer_Nombre + ' ' + Segundo_Nombre + ...)
    GO
    


    Con la columna calculada la consulta de selección se vuelve simple:

    SELECT NombreCompleto, ... WHERE NombreCompleto LIKE @filtro


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator miércoles, 15 de febrero de 2017 16:46
    • Marcado como respuesta adriian.91 miércoles, 15 de febrero de 2017 17:04
    miércoles, 15 de febrero de 2017 15:58
  • Gracias Willams 
    miércoles, 15 de febrero de 2017 17:18