Archivo de la etiqueta: buscar en grilla

Filtrar datos en DataGridView

Vamos a filtrar datos en un DataGrigView, pero antes de eso se ha debido cargar los registros al DGV, previa búsqueda de por ejemplo, Clientes que su nombre o apellido comience con M, una vez cargada la data, se procede a filtrar los datos, hacer la búsqueda en el DGV, más no en la DB.

Sería una mala practica tener los datos cargados en el DGV y hacer el filtro en la DB, lo que se pretende con esta técnica es liberar recursos en el servidor de datos y pretender una mejor performance de la aplicación.

Vamos a crear un método con DataTable en el cual le vamos asignar los datos que recuperamos de la DB.

public class ClienteRepository
    {
        public static DataTable GetCliente()
        {
            using (SqlCeConnection cn = Conexion.Conectar("NorthwindConnectionString"))
            {
                cn.Open();
                using (SqlCeCommand cmd = cn.CreateCommand())
                {
                    cmd.CommandText = "SELECT [Customer ID], [Company Name] FROM Customers";

                    using (SqlCeDataAdapter da = new SqlCeDataAdapter(cmd))
                    {
                       DataTable dt = new DataTable();
                        da.Fill(dt);
                        return dt;
                    }
                }
            } 
        }

Ahora vamos a llamar el método GetCliente desde el evento Load del formulario para cargar el DataGridView.

public partial class frmCliente : Form
    {
        private DataTable dt = new DataTable();
        private DataSet ds = new DataSet();
        public frmCliente()
        {
            InitializeComponent();
        }

        private void frmCliente_Load(object sender, EventArgs e)
        {
            dt = ClienteRepository.GetCliente();
            ds.Tables.Add(dt);
            dgvCliente.DataSource = dt;
            FormatoGrilla();
        }

Ya esta cargado el objeto DGV con los datos ahora pasamos a hacer la búsqueda en los datos que tiene cargado el DGV, mas no en la DB. Como decía líneas arriba hemos utilizado un objeto DataTable, para poder usar el DataView.

El DataView representa una vista personalizada que puede enlazar datos de un DataTable para ordenación, filtrado, búsqueda, edición y navegación. El DataView no almacena datos, si no que representa una vista conectada de su correspondiente DataTable.

private void txtDescripcion_TextChanged(object sender, EventArgs e)
        {
            string fieldName = string.Concat("[", dt.Columns[1].ColumnName,"]");
            dt.DefaultView.Sort = fieldName;
            DataView view = dt.DefaultView;
            view.RowFilter = string.Empty;
            if (txtDescripcion.Text != string.Empty)
                view.RowFilter = fieldName + " LIKE '%" + txtDescripcion.Text + "%'";
            dgvCliente.DataSource = view;
        }

El filtro lo realizamos en el evento txtDescripcion_TextChanged de la caja de texto que vamos usar para ingresar los datos que queremos filtrar o buscar. Quedaría de esta manera.

DGV

Descargar Proyecto C#

 

Anuncios