如何使用C#Windows窗体中的文本框过滤DataGridView

时间:2015-05-22 15:52:55

标签: c#

我发现有关如何过滤我在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;
    }

请帮忙!感谢

2 个答案:

答案 0 :(得分:-1)

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

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失去焦点之前,它仍然无法更新。

答案 1 :(得分:-1)

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