如何让ListView中的Searchbox实现不区分大小写的过滤功能?
ListView 不区分大小写的搜索过滤实现
你当前的ListView过滤逻辑区分大小写,要实现不区分大小写的匹配,只需要修改过滤条件里的文本比较逻辑,以下是两种常用可行方案:
方案1:统一转换为大写/小写进行比较
将列表项文本和搜索框输入文本都转换为大写(或小写)后再判断包含关系,就能忽略大小写差异。
修改后的filterbox_TextChanged事件代码:
private void filterbox_TextChanged(object sender, EventArgs e) { listView1.Items.Clear(); // 清空当前显示项 if (string.IsNullOrEmpty(filterbox.Text)) { listView1.Items.AddRange(allItems.ToArray()); // 无搜索内容时显示全部项 return; } // 统一转换为大写,实现不区分大小写过滤 string searchText = filterbox.Text.ToUpper(); var filteredItems = allItems .Where(x => x.SubItems .Cast<ListViewItem.ListViewSubItem>() .Any(y => y.Text.ToUpper().Contains(searchText))) .ToArray(); listView1.Items.AddRange(filteredItems); }
方案2:使用StringComparison枚举(更推荐)
直接调用string.Contains的重载方法,传入StringComparison.OrdinalIgnoreCase参数,无需手动转换大小写,代码更简洁且性能更优(该重载支持.NET Core 2.0+/.NET 5+版本)。
修改后的代码:
private void filterbox_TextChanged(object sender, EventArgs e) { listView1.Items.Clear(); // 清空当前显示项 if (string.IsNullOrEmpty(filterbox.Text)) { listView1.Items.AddRange(allItems.ToArray()); // 无搜索内容时显示全部项 return; } // 使用不区分大小写的比较规则 string searchText = filterbox.Text; var filteredItems = allItems .Where(x => x.SubItems .Cast<ListViewItem.ListViewSubItem>() .Any(y => y.Text.Contains(searchText, StringComparison.OrdinalIgnoreCase))) .ToArray(); listView1.Items.AddRange(filteredItems); }
补充说明
- 两种方案都能实现需求,方案2更符合.NET的API设计规范,避免了不必要的字符串转换操作。
- 建议把原代码中的
filterbox.Text == ""替换为string.IsNullOrEmpty(filterbox.Text),能同时处理空字符串和null的场景。
内容的提问来源于stack exchange,提问作者user12452537
相关产品推荐
相关产品推荐

