繁体   English   中英

如何使用 TextBox 数据动态过滤 DataGridView?

[英]How to dynamically filter DataGridView using TextBox data?

我用单列创建了一个简单的 DataGridViewa,并在上面添加了一个 TextBox。 目前,文本实际上是一个 DataTable(虽然这会使过滤变得更容易),它有 2 列、数字和文本(我在 DataGridView 中隐藏了数字)。 如果需要,我可以将其更改为任何其他 class。

当用户在 TextBox 中输入一个字母时,我想动态过滤并仅显示包含此文本的行。

我像这样将数据加载到 DataGridView:

private void PhrasesForm_Load(object sender, EventArgs e)
{
    phrasesDataGridView.ReadOnly = true;
    phrasesDataGridView.DataSource = _phrases.Phrases;
    phrasesDataGridView.Columns[0].Visible = false;
    this.phrasesDataGridView.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}

当添加另一个字母时,过滤器将重新调整。 我在这里写什么...

private void filterBox_TextChanged(object sender, EventArgs e)
{
}

这个

如果您有 DataGridView 或任何带有DataSource的控件,请考虑使用Nuget Package BindingListView 它具有通过鼠标单击任何列对绑定列表进行排序的功能,但它也具有过滤数据的功能。

List<Customer> customers = ...
BindingListView<Customer> customerView = new BindingListView<Customer>(customers);
dataGridView1.DataSource = customerView;

并且 presto,如果显示所有客户。 列取决于您的列定义。

例如,要过滤客户,只显示在特定日期之前出生的客户:

void ShowCustomers(DateTime limitDate)
{
    customerView.ApplyFilter( customer => customer.BirthDay < limitDate));
}

结果:只显示年长的客户。

你可以这样做:

void ShowItemsWithPhraseStart(string phraseStart)
{
    myView.ApplyFilter(row => row.Phrase.StartsWith(phraseStart));
}

还有宾果游戏:数据网格仅显示属性 Phrase 的值以phraseStart 开头的行。

private void OnTextBocChanged(object sender, ...)
{
    var text = this.TextBox1.Text;
    ShowItemsWithPhraseStart(text);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM