Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C上的textbox删除/过滤listbox上的数据_C#_Winforms_Search_Filter_Listbox - Fatal编程技术网

C# 如何使用C上的textbox删除/过滤listbox上的数据

C# 如何使用C上的textbox删除/过滤listbox上的数据,c#,winforms,search,filter,listbox,C#,Winforms,Search,Filter,Listbox,我需要将一个搜索框添加到一个列表框中,该列表框包含从SQL提取的数据-我不确定如何添加,因为它不是我的代码。我只需要添加搜索功能。列表框包含用户名和姓氏。因此,我所要做的就是使用列表框名称 到目前为止,我可以搜索用户名,但它只显示最近的搜索-我希望代码过滤掉包含我在搜索框中键入内容的所有内容: private void btnSearch_Click(object sender, EventArgs e) { this.lbUsers.SelectedItems.

我需要将一个搜索框添加到一个列表框中,该列表框包含从SQL提取的数据-我不确定如何添加,因为它不是我的代码。我只需要添加搜索功能。列表框包含用户名和姓氏。因此,我所要做的就是使用列表框名称

到目前为止,我可以搜索用户名,但它只显示最近的搜索-我希望代码过滤掉包含我在搜索框中键入内容的所有内容:

    private void btnSearch_Click(object sender, EventArgs e)
    {
        this.lbUsers.SelectedItems.Clear();
        for (int s = this.lbUsers.Items.Count - 1; s >= 0; s--)
        {
            if (this.lbUsers.Items[s].ToString().ToLower().Contains(this.tbSearch.Text.ToLower()))
            {
                this.lbUsers.SetSelected(s, true);
            }
        }
    }

我也不希望所有的用户都显示出来——只显示那些与搜索框的条件相关的用户

您必须手动执行此操作:

在列表中保存所有用户 过滤包含文本框中文本的列表 将结果添加到列表框中 这是一个简单的例子:

List<User> users = new List<User>();

private void txtFilter_TextChanged(object sender, EventArgs e)
{
    List<User> displayList = this.users;

    if(this.txtFilter.Text != string.Empty)
    {
        displayList = this.users.Select(u => u.Name == this.txtFilter.Text);
    }

    this.lbUsers.Items.Clear();
    this.lbUsers.Items.AddRange(displayList);
}

我认为最好的方法是通过可见性。这样,您就不必一直创建/处理列表框项

例如,下面的代码将执行您想要的操作:

foreach (var item in lbUsers.Items)
{
    if (item.ToString().Contains(this.tbSearch.Text))
    {
        item.Visible = true;
    }
    else
    {
        item.Visible = false;
    }
}

下面是一些您可以查看的资源—而且,当搜索执行时,会弹出一个窗口,其中的Object未设置为objecct的实例。我知道他的代码是从SQL中提取数据的,我想他是使用LINQ查询提取数据的。我是一个新手,只是想寻求一些帮助,只是修改查询不是更容易吗?添加一个类似%searchstring%的内容吗?我用过这个,但现在没有得到任何结果。我想能够键入甚至只是一个和所有的名称以一开始需要显示。目前还没有任何东西。@JudithJoubert此代码原则上是有效的。您必须调试并查看发生了什么。