Cómo filtrar DataGridView utilizando TextBox
No tengo mucha experiencia aún. Estoy tratando de filtrar las filas que contienen el texto de entrada.
En orden..
Utilizo MailKit para recibir mensajes entrantes y colocar los datos de ellos en un Grid.
public void ShowMessages(ImapClient client)
{
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadOnly);
var query = SearchQuery.All;
var uids = inbox.Search(query);
var items = inbox.Fetch(uids, MessageSummaryItems.Full | MessageSummaryItems.BodyStructure).Reverse();
foreach (var item in items)
{
...
dataGridMessages.Rows.Add(read, item.Envelope.Subject, item.Envelope.From, item.Envelope.Date, attach, item.Size, false, item.UniqueId);
}
}
Luego intento filtrar las filas.
private void searchTxb_TextChanged(object sender, EventArgs e)
{
BindingSource bs = new BindingSource();
bs.DataSource = dataGridMessages.DataSource;
bs.Filter = string.Format("Subject LIKE '%{0}%'", searchTxb.Text);
dataGridMessages.DataSource = bs;
}
Pero luego de escribir el texto, el grid está vacío, no encuentra nada.
Por favor, dime qué estoy haciendo mal.
davy.ai
Parece que estás intentando filtrar el DataGridView utilizando un BindingSource y el operador LIKE en la columna Subject con el texto de búsqueda searchTxb como entrada.
Sin embargo, el problema puede ser que no estás configurando correctamente el DataSource del BindingSource. En lugar de establecerlo directamente en DataGridView.DataSource, debes establecerlo en un DataTable que contenga los mismos datos que el DataGridView.
Aquí tienes un ejemplo de cómo podrías modificar tu código:
Los cambios clave son:
Esto debería permitir que el filtro funcione correctamente.