繁体   English   中英

如何使用C#上的文本框删除/过滤列表框上的数据

[英]How to remove / filter data on listbox using textbox on C#

我需要在具有从SQL提取数据的列表框中添加搜索框-我不确定这不是我的代码。 我只需要添加搜索功能。 列表框包含用户名和姓氏。 因此,我只需要使用lbUsers(列表框名称)即可。

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

    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;
    }
}

暂无
暂无

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

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