列表视图中的动态搜索框[重复]

问题描述 投票:0回答:1

我有一个列表视图,其中包含数据库中的多个项目,并且我有一个搜索框,可以根据在搜索框中键入的字符过滤此列表视图。

这一切都很好,并且是使用“TaW”链接的帮助完成的:How to search listview's items with textbox in c#

首先:我已将完整的项目集存储在类级别变量中:

List<ListViewItem> allItems = new List<ListViewItem>();

然后我在添加全套项目后填写了它:

allItems.Clear();
allItems.AddRange(listView1.Items.Cast<ListViewItem>());

然后我编写了filterTextbox的TextChanged事件;这里我总是使用全套数据:

private void filterbox_TextChanged(object sender, EventArgs e)
{
    listView1.Items.Clear();   // clear all items we have atm
    if (filterbox.Text == "")
    {
        listView1.Items.AddRange(allItems.ToArray());  // no filter: add all items
        return;
    }
    // now we find all items that have a suitable text in any subitem/field/column
    var list = allItems.Cast<ListViewItem>()
                       .Where( x => x.SubItems
                                     .Cast<ListViewItem.ListViewSubItem>()
                                     .Any(y => y.Text.Contains(filterbox.Text)))
                       .ToArray();
    listView1.Items.AddRange(list);  // now we add the result
}

但是我注意到这将大写和小写视为单独的事物,因此如果我搜索“Web”,它将过滤所有带有“Web”一词的条目,但不会过滤那些带有“WEB”或“web”的条目。

我怎样才能做到这一点,这样它就可以根据字母而不是大小写来工作,因为我不在乎。 我希望过滤我的列表,以便它显示所有 3 个条目 -“Web”、“WEB”和“web”?

我觉得我需要某种转换“ToUpper”或“ToLower”,但我不确定将其放在我的代码中的哪里。

谢谢你,

c# listview search
1个回答
-1
投票

要使您的搜索过滤器不区分大小写,您可以修改现有代码,将搜索文本和

ListView
项目中的文本转换为小写或大写,然后再进行比较。具体方法如下:

private void filterbox_TextChanged(object sender, EventArgs e)
{
    listView1.Items.Clear();   // clear all items we have atm
    if (string.IsNullOrEmpty(filterbox.Text))
    {
        listView1.Items.AddRange(allItems.ToArray());  // no filter: add all items
        return;
    }
    
    // Convert the search text to lowercase (or uppercase) for case-insensitive comparison
    string searchText = filterbox.Text.ToLower(); // or .ToUpper() if you prefer
    
    // Now we find all items that have suitable text in any subitem/field/column
    var list = allItems.Cast<ListViewItem>()
                       .Where(x => x.SubItems
                                     .Cast<ListViewItem.ListViewSubItem>()
                                     .Any(y => y.Text.ToLower().Contains(searchText))) // or .ToUpper()
                       .ToArray();
    
    listView1.Items.AddRange(list);  // now we add the result
}

在此修改后的代码中,我们将搜索文本 (searchText)

ListView
项目中的文本转换为小写 (或大写),然后再进行比较。这样,搜索将不区分大小写,并且无论字母大小写如何,它都会匹配项目。您可以根据您的喜好选择
.ToLower()
.ToUpper()

© www.soinside.com 2019 - 2024. All rights reserved.