none
realizar busqueda textbox-datagrid mediante textbox RRS feed

  • Pregunta

  • hola deseo realizar una busqueda desde un textbox a un datagrid enlazado a tabla acces,
    la busqueda que deseo realizar es poner una texto y que me recupere en el data grid todos los registros que contengan esa parte del texto
    mi codigo:

    sql = "SELECT * FROM articulos WHERE codigo=@code1"

    cn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\basetiempos.mdb")

    cn.Open()

    cm = New OleDbCommand()

    cm.CommandText = sql

    cm.CommandType = CommandType.Text

    cm.Connection = cn

    cm.Parameters.Add("@code1", OleDbType.VarChar)

    cm.Parameters("@code1").Value = ToolStripTextBox1.Text

    da = New OleDbDataAdapter(cm)

    ds = New DataSet

    da.Fill(ds)

    vista = ds.Tables(0).DefaultView

    DataGridView1.DataSource = vista

    domingo, 8 de marzo de 2009 16:36

Todas las respuestas

  • Hola javito, si no vas a utilizar más parametros para esa misma consulta, no veo útil esa forma de programación.

    Creo que sería mas sencillo lo siguiente:

    * Lo primero, puedes utilizar esta función, que realiza la consulta en la base de datos y devuelve como resultado un datatable:

    public static DataTable EjecutaSql(string sql, SqlConnection conexion) 
        try 
     
        { 
     
        SqlDataAdapter da = new SqlDataAdapter(); 
        SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, conexion); 
        da.SelectCommand = cmd
        DataTable dtGet = new DataTable(); 
        da.Fill(dtGet); 
            return dtGet; 
        } 
        catch (SqlException ex) 
        { 
            MessageBox.Show(ex.Message); 
        } 
        catch (Exception ex) 
        { 
            MessageBox.Show(ex.Message); 
        } 
    }  

    Luego es sencillo, haces la llamada a la función concatenando el valor del textbox;

    sql = "SELECT * FROM articulos WHERE codigo=" + TextBox1.Text; <-- si el código es un númerico.

    sql = "SELECT * FROM articulos WHERE codigo='" + TextBox1.Text + "'"; <-- si el código es un string, le añadimos comillas simples de apertura y cierre.

    Le asignamos el resultado de la función (datatable, como datasource al datagrid de esta forma).

    DataGridView1.DataSource = this.EjecutaSql(sql, conexion);

    Recuerda, conexión es un SqlConnection con la cadena de conexión a la base de datos.

    Saludos.

    -----------------------

    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.

    domingo, 8 de marzo de 2009 19:22
  • Hola.

    Hay un conjunto de clases que precisamente se encargan de filtrar resultados en un DataSet/DataTable. Son los llamados DataView, son fáciles de usar y no necesitas realizar mas consultas al servidor, si no que el filtrado se basa en estos.

    Por ejemplo, después de llenar el DataTable, creas un nuevo DataView cuyo parámetro es tu nuevo DataTable. A partir de ahora tu DataView filtrará los datos usando consultas Where tal cual en SQL. Te paso un pequeño ejemplo:

    Dim dt As DataTable = ds.Tables(0) 
    Dim dv As New DataView(dt) 
     
    dv.RowFilter = "Nombre LIKE '" & Text1.Text & "%'" 
     

    Saludos.
    • Propuesto como respuesta spucheta lunes, 9 de marzo de 2009 18:17
    lunes, 9 de marzo de 2009 17:35
  • y como hago tambien si no es muxa molestia para filtrar a dos columna a la vez?
    lunes, 9 de marzo de 2009 20:32
  • Hola.

    No es ninguna molesta.

    Dim dt As DataTable = ds.Tables(0)  
    Dim dv As New DataView(dt)  
      
    dv.RowFilter = "Columna_1 LIKE '" & TextBoxColumna_1.Text & "%' AND Columna_2 LIKE '" & TextBoxColumna_2.Text & "%'" 

    OJO, este ejemplo es en el supuesto caso que tus dos columnas fueran de tipo texto, ajusta la consulta a tu necesidad.

    Saludos.

    (Marca tu respuesta como válida si te sirvió de ayuda)
    martes, 10 de marzo de 2009 14:33
  • me da este error al filtrar por un registro numerico, tengo algo que esta mal.

    sql = "SELECT * FROM articulos WHERE med1=@med1"

    cn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\basetiempos.mdb")

    cn.Open()

    cm = New OleDbCommand

    cm.CommandText = sql

    cm.CommandType = Data.CommandType.Text

    cm.Connection = cn

    cm.Parameters.Add("@med1", OleDb.OleDbType.Double)

    cm.Parameters("@med1").Value = TextBox1.Text

    da = New OleDb.OleDbDataAdapter(cm)

    ds = New DataSet()

    da.Fill(ds)

    datos.DataSource = ds.Tables(0).DefaultView

    viernes, 13 de marzo de 2009 23:14
  • Hola hermanos, es mas fazil para optimizar y dejar vacio la renundancia DATA.

    Trabaja directo con SQL crea un tabla luego tu DataSet incluido:(BindingSource,TableAdapter)

    Saludos.

    hxxp://boniek.tk

    domingo, 27 de junio de 2010 7:15