如何在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;
}
请帮忙!由于
您需要在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);
}