none
Buscar registros en BD al hacer enter en Textbox RRS feed

  • Pregunta

  • Estimados,

    En mi aplicación VB.NET (SQL) tengo DataGridView que me permiten listar la info obtenida desde las bases de datos y eso esta OK, pero necesito habilitar una opción adicional...

    La idea es que el usuario ingrese un código en un textbox y al hacer ENTER en el se ejecute la búsqueda (el SP) y me llene los campos restantes...

    Alguna idea de como hacerlo???

    Saludos,
    Gabriel

    martes, 2 de diciembre de 2014 19:27

Respuestas

  • Gabriel, la llamada al procedimiento deberías hacerlo en el evento KeyPress del control TextBox que tienes. Imagino que tú aplicación lo tienes por capas y la capa de presentación llamará a la de negocios para ejecutar dicho procedimiento.

    if (e.KeyChar == (char)(Keys.Enter))
    {
      ... /*LLAMADA*/
    }

    Ahora, depende mucho con que origen de datos estés trabajando ya que si usas DATASET entiendo que te permite filtrar. Si cargas la grilla con un DataReader pues deberás ejecutar un procedimiento y cargar nuevamente la grilla.

    A la espera de otras opiniones.

    • Marcado como respuesta Gabriel Núñez martes, 2 de diciembre de 2014 21:30
    martes, 2 de diciembre de 2014 19:40
  • ok la idea es la misma en lugar de obtener una lista obtienes un unico registro, recuerda que aqui planteamos ejemplos aproximados tambien queda en ti tomar la idea y adaptarla un poco a lo que buscas

    Private Sub TextBox1_KeyPress(...)
    	If e.KeyChar = Convert.ToChar(Keys.Enter) Then
    		
    		DataTable dt = Filtro(Convert.ToInt32(Textbox.Text))
    		If dt.Rows.Count > 0 Then
    			Dim row As DataRow = dt.Rows(0)
    			textbox1.Text = row["campo1"].ToString()
    			textbox2.Text = row["campo2"].ToString()
    		End If
    		
    	End If
    End Sub

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gabriel Núñez martes, 2 de diciembre de 2014 21:30
    martes, 2 de diciembre de 2014 20:08

Todas las respuestas

  • hola

    aqui

     Manejo de DataGridView

    se responde sobre el mismo tema

    Private Sub TextBox1_KeyPress(...)
    	If e.KeyChar = Convert.ToChar(Keys.Enter) Then
    		dataGridView1.DataSource = Filtro(Convert.ToInt32(Textbox.Text))
    	End If
    End Sub

    Public Function Filtro(codigo As Integer) As DataTable

    Using conn As New SqlConnection("TuCadenaConexion") Dim dt As New DataTable() Dim query As String = "select * from TuTABALA where codigo=@cod" Dim cmd As New SqlCommand(query, conn) cmd.Parameters.AddWithValue("@cod", codigo) Dim adap As New SqlDataAdapter(cmd) adap.Fill(dt) Return dt End Using

    End Function


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 2 de diciembre de 2014 19:40
  • Gabriel, la llamada al procedimiento deberías hacerlo en el evento KeyPress del control TextBox que tienes. Imagino que tú aplicación lo tienes por capas y la capa de presentación llamará a la de negocios para ejecutar dicho procedimiento.

    if (e.KeyChar == (char)(Keys.Enter))
    {
      ... /*LLAMADA*/
    }

    Ahora, depende mucho con que origen de datos estés trabajando ya que si usas DATASET entiendo que te permite filtrar. Si cargas la grilla con un DataReader pues deberás ejecutar un procedimiento y cargar nuevamente la grilla.

    A la espera de otras opiniones.

    • Marcado como respuesta Gabriel Núñez martes, 2 de diciembre de 2014 21:30
    martes, 2 de diciembre de 2014 19:40
  • hola

    aqui

     Manejo de DataGridView

    se responde sobre el mismo tema

    Private Sub TextBox1_KeyPress(...)
    	If e.KeyChar = Convert.ToChar(Keys.Enter) Then
    		dataGridView1.DataSource = Filtro(Convert.ToInt32(Textbox.Text))
    	End If
    End Sub

    Public Function Filtro(codigo As Integer) As DataTable

    Using conn As New SqlConnection("TuCadenaConexion") Dim dt As New DataTable() Dim query As String = "select * from TuTABALA where codigo=@cod" Dim cmd As New SqlCommand(query, conn) cmd.Parameters.AddWithValue("@cod", codigo) Dim adap As New SqlDataAdapter(cmd) adap.Fill(dt) Return dt End Using

    End Function


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Pero la idea es no utilizar un DataGridView...

    Saludos,

    martes, 2 de diciembre de 2014 19:47
  • Gabriel, la llamada al procedimiento deberías hacerlo en el evento KeyPress del control TextBox que tienes. Imagino que tú aplicación lo tienes por capas y la capa de presentación llamará a la de negocios para ejecutar dicho procedimiento.

    if (e.KeyChar == (char)(Keys.Enter))
    {
      ... /*LLAMADA*/
    }

    Ahora, depende mucho con que origen de datos estés trabajando ya que si usas DATASET entiendo que te permite filtrar. Si cargas la grilla con un DataReader pues deberás ejecutar un procedimiento y cargar nuevamente la grilla.

    A la espera de otras opiniones.

    Esta respuesta esta más cerca de lo que necesito, voy a implementarla y te aviso como me fue.

    Saludos,

    martes, 2 de diciembre de 2014 19:48
  • ok la idea es la misma en lugar de obtener una lista obtienes un unico registro, recuerda que aqui planteamos ejemplos aproximados tambien queda en ti tomar la idea y adaptarla un poco a lo que buscas

    Private Sub TextBox1_KeyPress(...)
    	If e.KeyChar = Convert.ToChar(Keys.Enter) Then
    		
    		DataTable dt = Filtro(Convert.ToInt32(Textbox.Text))
    		If dt.Rows.Count > 0 Then
    			Dim row As DataRow = dt.Rows(0)
    			textbox1.Text = row["campo1"].ToString()
    			textbox2.Text = row["campo2"].ToString()
    		End If
    		
    	End If
    End Sub

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gabriel Núñez martes, 2 de diciembre de 2014 21:30
    martes, 2 de diciembre de 2014 20:08
  • ok la idea es la misma en lugar de obtener una lista obtienes un unico registro, recuerda que aqui planteamos ejemplos aproximados tambien queda en ti tomar la idea y adaptarla un poco a lo que buscas

    Private Sub TextBox1_KeyPress(...)
    	If e.KeyChar = Convert.ToChar(Keys.Enter) Then
    		
    		DataTable dt = Filtro(Convert.ToInt32(Textbox.Text))
    		If dt.Rows.Count > 0 Then
    			Dim row As DataRow = dt.Rows(0)
    			textbox1.Text = row["campo1"].ToString()
    			textbox2.Text = row["campo2"].ToString()
    		End If
    		
    	End If
    End Sub

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Estimado, implemente la solución pero me da el siguiente error:

    Un valor de tipo 'System.Data.DataRow' no se puede convertir en 'String'

    Implemente una función que ya tenia, aca el código:

     Try
                Conectar()
                cmd = New SqlCommand("SP_ListarNegocioClientesxCodigo")
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Connection = cn
                cmd.Parameters.AddWithValue("@Codigo", dts.gCodigo)
    
                If cmd.ExecuteNonQuery Then
                    Dim dt As New DataTable
                    Dim da As New SqlDataAdapter(cmd)
                    da.Fill(dt)
                    Return dt
                Else
                    Return Nothing
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
                Return Nothing
            Finally
                Desconectar()
            End Try

    Y la llame de la siguiente manera:

    If e.KeyChar = Convert.ToChar(Keys.Enter) Then
                Dim dts As New Datos
                Dim func As New Funciones
    
                dts.gCodigo = txtCodigo.Text
    
                Dim dt As DataTable = func.ListarNegocioxCodigo(dts)
    
                If dt.Rows.Count > 0 Then
                    Dim row As DataRow = dt.Rows(0)
                    txtRutEmp.Text=row["Neg_RutEmp"].ToString()
                    txtNombreEmp.Text=row["Neg_NombEmp"].ToString()
                    txtEncargadoEmp.Text=row[""].ToString()
                End If
            End If

    Que hice mal???

    Saludos,


    martes, 2 de diciembre de 2014 21:22
  • disculpa es que no se usan [] sino seri

      txtRutEmp.Text=row("Neg_RutEmp").ToString()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 2 de diciembre de 2014 21:28
  • Lo solucione...

    Solo le entregue la numeración de la columna...

    quedaría:

    textbox.text=row(0).ToString()

    Saludos,

    martes, 2 de diciembre de 2014 21:30
  • Gabriel, te sugiero que no uses posiciones ordinales. ¿Qué pasa si haces mantenimiento a tus tablas y de pronto mueves el orden de tus columnas? Es mejor indicar el nombre de la columna tal como lo menciona Leandro.
    miércoles, 3 de diciembre de 2014 13:37