none
filtrar datos en textbox por procedimiento almacenado RRS feed

  • Pregunta

  • hola estoy aprendiendo a programar en vb y sqlserver  por capas quisiera saber como llamar al procedimiento almacenado por metodo de una capa al textbox para filtrar datos del datagridview
    lunes, 4 de julio de 2016 17:23

Respuestas

  • beth116,

    ¿Dónde presentas problemas?  ¿En el manejo de las capas? ¿Al invocar a un método de la capa de negocios? ¿En la implementación del método de acceso a datos?

    El objeto de tipo DataGridView de la capa de UI puede obtener los datos vinculándose con un objeto que contenga una estructura de datos -por ejemplo un objeto de tipo DataTable-, para ello se debe de invocar a la función que reside en una capa inferior (negocio, acceso a datos):

    DataGridView1.DataSource = ObtenerDatos(txtNombre.Text)

    Para ello se entiende que tienes un método llamado ObtenerDatos() que define un parámetro para realizar el filtro. El método en la capa de acceso a datos deberá tener la siguiente forma:

    Public Function ObtenerDatos(Nombre As String) As DataTable
    	Using conexion As New SqlConnection("<Colocar cadena de conexión>")
    		Dim SqlCommand cmd New SqlCommand("MiProcedimiento", conexion)
    		
    		cmd.CommandType = CommandType.StoredProcedure
    		cmd.Parameters.AddWithValue("@Param", Nombre)
    		
    		Dim SqlDataAdapter da New SqlDataAdapter(cmd)	
    		
    		Dim dt As New DataTable()
    		
    		da.Fill(dt)
    		
    		Return dt
    	End Using
    End Try
    

    Adapta el código según tu caso. Discúlpame si el código tiene algún problema en la sintaxis, por lo general no tengo como probar lo que escribo.

    lunes, 4 de julio de 2016 17:40

Todas las respuestas

  • beth116,

    ¿Dónde presentas problemas?  ¿En el manejo de las capas? ¿Al invocar a un método de la capa de negocios? ¿En la implementación del método de acceso a datos?

    El objeto de tipo DataGridView de la capa de UI puede obtener los datos vinculándose con un objeto que contenga una estructura de datos -por ejemplo un objeto de tipo DataTable-, para ello se debe de invocar a la función que reside en una capa inferior (negocio, acceso a datos):

    DataGridView1.DataSource = ObtenerDatos(txtNombre.Text)

    Para ello se entiende que tienes un método llamado ObtenerDatos() que define un parámetro para realizar el filtro. El método en la capa de acceso a datos deberá tener la siguiente forma:

    Public Function ObtenerDatos(Nombre As String) As DataTable
    	Using conexion As New SqlConnection("<Colocar cadena de conexión>")
    		Dim SqlCommand cmd New SqlCommand("MiProcedimiento", conexion)
    		
    		cmd.CommandType = CommandType.StoredProcedure
    		cmd.Parameters.AddWithValue("@Param", Nombre)
    		
    		Dim SqlDataAdapter da New SqlDataAdapter(cmd)	
    		
    		Dim dt As New DataTable()
    		
    		da.Fill(dt)
    		
    		Return dt
    	End Using
    End Try
    

    Adapta el código según tu caso. Discúlpame si el código tiene algún problema en la sintaxis, por lo general no tengo como probar lo que escribo.

    lunes, 4 de julio de 2016 17:40
  • hola este es mi cod en la capa datos 
    Public Function fnBuscarProyecto(ByVal nombrePr As String) As DataTable
            Try
                conectado()
                cmd = New SqlCommand("BuscarProyecto")
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Connection = cnn
                cmd.Parameters.AddWithValue("@nombre", nombrePr)
                Dim dt As New DataTable
                Dim da As New SqlDataAdapter(cmd)
                da.Fill(dt)
                Return dt
            Catch ex As Exception
                MsgBox(ex.Message)
                Return Nothing
            End Try
        End Function
    y no puedo hacer que se filtren los datos del datagridview en el textbox
    Private Sub txtBuscar_TextChanged(sender As Object, e As EventArgs) Handles txtBuscar.TextChanged
            Dim dao As New DmostrarProyecto
            dgvListaProyectos.DataSource = dao.fnBuscarProyecto(txtBuscar.Text)
        End Sub

    martes, 5 de julio de 2016 2:30
  • beth116,

    A simple vista no tiene nada incorrecto, pero no basta con mencionar "y no puedo hacer que se filtren los datos del datagridview en el textbox", ¿obtienes alguna excepción? ¿has validado que la consulta retorne filas según la condición? ¿tienes alguna pista del problema que nos ayude a apoyarte? Nota que si no das mucha información no hay forma de poder entender lo que sucede.

    Estoy asumiendo que intentas decir que los datos del objeto de tipo DataGridView se deben filtrar a razón del valor que hay en un objeto de tipo TextBox, ¿verdad?, porque si tomo textualmente lo que escribes no tiene mucho sentido lo que requieres, en todo caso te agradeceré dejes claro lo que necesitas.

    Insistiendo en que la expresión de filtro la obtienes del objeto de tipo TextBox, entonces imagino que en el procedimiento almacenado haces uso de LIKE para devolver filas en base a coincidencias, ¿verdad?

    <...> WHERE nombrePr LIKE '%' + @nombrePr + '%'

    Esperamos tus comentarios.

    martes, 5 de julio de 2016 2:44