如何在c# Windows窗体中使用文本框过滤DataGridView

本文关键字:文本 过滤 DataGridView Windows 窗体 | 更新日期: 2023-09-27 17:50:29

我发现了一个关于如何过滤我在Windows窗体的数据网格视图中的列表的问题。

基本上,我有一个文本框,我想当我在里面输入值时,它会过滤数据网格视图。

我没有任何错误,但是当我尝试在文本框中写入文本时,网格视图保持不变,不过滤任何内容。

下面是我的FormLoad(它填充gridview)

private void Transactions_Load(object sender, EventArgs e)
    {
        List<LogsViewModel> logs = sr.GetTransactions().ToList();
        dgvTransactions.DataSource = sr.GetTransactions().ToList();
    }

当我在文本框中输入文本时:

private void txtAccountID_TextChanged(object sender, EventArgs e)
    {
        BindingSource bs = new BindingSource();
        bs.DataSource = dgvTransactions.DataSource;
        bs.Filter = dgvTransactions.Columns[1].HeaderText.ToString() + " LIKE '%" + txtAccountID.Text + "%'";
        dgvTransactions.DataSource = bs.DataSource;
    }

请帮忙!由于

如何在c# Windows窗体中使用文本框过滤DataGridView

您需要在txtAccountID_TextChanged()事件中调用DataBind()方法。

private void txtAccountID_TextChanged(object sender, EventArgs e)
    {
        BindingSource bs = new BindingSource();
        bs.DataSource = dgvTransactions.DataSource;
        bs.Filter = dgvTransactions.Columns[1].HeaderText.ToString() + " LIKE '%" + txtAccountID.Text + "%'";
        dgvTransactions.DataSource = bs.DataSource;
        dgvTransactions.DataBind();
    }

我不能测试这一点,但它仍然可能不会更新,直到你按下Enter键或导致TextBox失去焦点。

private void txtAccountID_TextChanged(object sender, EventArgs e)
{
  (dgvTransactions.DataSource as DataTable).DefaultView.RowFilter = string.Format("Field = '{0}'", textBoxFilter.Text);
}