[英]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.