none
Filtrar dgv sin acceso a la base de datos RRS feed

  • Pregunta

  • Hola! Cómo va?

    Intento filtrar un datagrid sin necesidad de acceder a la bd. Es decir, cargo el formulario y ya me aparece el datagrid con los datos de la base de datos con la cual está configurado.

    Lo que necesito, es que cuando el usuario ingrese cualquier caracter en un textbox que figura en el formulario, el data comience a filtrar. No se si es importante aclarar que el data solo es de lectura, ya que en caso de querer agregar, editar o eliminar el usuario la hace desde otro formulario mediante botones.

    He visto que al momento de asignarle que base de datos va a mostrar el data colocar LIKE y %... y acá es donde me perdí...

    MUCHAS GRACIAS porque me están ayudando y enseñando bastante!!!

    Lucho :-)

    ---

    martes, 23 de enero de 2018 20:01

Todas las respuestas

  • Hola

    En este caso, es sencillo hacerlo con linq sobre el mismo control DataGridView. Es excelente que pienses en el performance y no recurrir constantemente a la BD. Te dejo el enlace que te será de ayuda

    DataGridView – Búsqueda con Linq

    Saludos


    Brayan De la Cruz
    Lima - Perú

    miércoles, 24 de enero de 2018 5:22
  • Hola

    En este caso, es sencillo hacerlo con linq sobre el mismo control DataGridView. Es excelente que pienses en el performance y no recurrir constantemente a la BD. Te dejo el enlace que te será de ayuda

    DataGridView – Búsqueda con Linq

    Saludos


    Brayan De la Cruz
    Lima - Perú

    Gracias por tu respuesta.

    Te comento... mi idea es que no se seleccione nada, sino que el usuario al escribir en el textbox se vaya filtrando el datagridview.

    Ahora bien, partiendo de que soy novato en C# y estoy aprendiendo... el código que figura en el link que me enviaste lo escribí en el evento TextChanged... hice mal? Por otro lado figura una palabra "busqueda" en el código... que sería? Lo tomé como el contenido del textbox.

    Este es el código que escribí... estoy perdido...

    private void txtBuscar_TextChanged(object sender, EventArgs e)
            {
                busqueda = Convert.ToString(txtBuscar);

                List<DataGridViewRow> rows = (from item in dataGridView1.Rows.Cast<DataGridViewRow>()
                                              let curso = Convert.ToString(item.Cells["CURSO"].Value ?? string.Empty)
                                              let turno = Convert.ToString(item.Cells["TURNO"].Value ?? string.Empty)
                                              let ciclo = Convert.ToString(item.Cells["CICLO"].Value ?? string.Empty)
                                              let modalidad = Convert.ToString(item.Cells["MODALIDAD"].Value ?? string.Empty)
                                              where curso.Contains(busqueda) || turno.Contains(busqueda) || ciclo.Contains(busqueda) || modalidad.Contains(busqueda)
                                              select item).ToList<DataGridViewRow>();
            }

    GRACIAS!!!

    Lucho :-)

    ---

    miércoles, 24 de enero de 2018 12:07
  • Continuo buscando... y ahora encontré esto en internet, pero no me toma todas las columnas, solo la última...

    private void txtBuscar_TextChanged(object sender, EventArgs e)
            {
                BindingSource bs = new BindingSource();
                bs.DataSource = dataGridView1.DataSource;
                bs.Filter = string.Format("CONVERT(" + dataGridView1.Columns[1].DataPropertyName + ",System.String) like '%" + txtBuscar.Text.Replace("'", "''") + "%'");
                bs.Filter = string.Format("CONVERT(" + dataGridView1.Columns[2].DataPropertyName + ",System.String) like '%" + txtBuscar.Text.Replace("'", "''") + "%'");
                bs.Filter = string.Format("CONVERT(" + dataGridView1.Columns[3].DataPropertyName + ",System.String) like '%" + txtBuscar.Text.Replace("'", "''") + "%'");
                bs.Filter = string.Format("CONVERT(" + dataGridView1.Columns[4].DataPropertyName + ",System.String) like '%" + txtBuscar.Text.Replace("'", "''") + "%'");
                dataGridView1.DataSource = bs;
            }

    Gracias

    Lucho :-)

    ---


    jueves, 25 de enero de 2018 15:39
  • Hola podrías probar de la siguiente forma.

     BindingSource bs = new BindingSource();
                bs.DataSource = dataGridView3.DataSource;
                bs.Filter = string.Format("Convert([NombreColumna1], System.String) LIKE '%{0}%' OR [NombreColumna2] LIKE '%{0}%' OR [NombreColumna3] LIKE '%{0}%'", txtbusqueda.Text);
                dataGridView3.DataSource = bs;

    Espero te sirva de ayuda.

    Saludos.


    • Editado osrol jueves, 1 de marzo de 2018 13:13
    jueves, 1 de marzo de 2018 13:12
  • la mejor respuesta Muchas Gracias, Fue de Gran ayuda.
    jueves, 5 de julio de 2018 7:42