【问题标题】:Filtering listbox using textbox using Linq but listbox stays full使用 Linq 使用文本框过滤列表框,但列表框保持完整
【发布时间】:2021-11-08 20:14:36
【问题描述】:

我无法使用 linq 和 textbox 过滤列表框数据。当我在文本框中输入要过滤的文本时,列表框的值不会改变。这个函数很重要,这样我就可以将数据发送到另一个包含列表框的表单。

        public void GetList(List<SemesterDetails> modules)
    {
        
        string filter = txtFilter.Text;
        foreach (var item in modules.Where(m => m.ModuleName.Contains(filter)))
        {
           
            LstModules.Items.Add(item);
        }
  
    } 

我尝试将函数调用到文本框事件函数:

    private void txtFilter_TextChanged(object sender, TextChangedEventArgs e)
    {

    List<SemesterDetails> semesters = new List<SemesterDetails>();

        GetList(semesters);
        
    }

结果是: 列表框中的项目保持未过滤状态。

【问题讨论】:

  • GetList(semesters);之前设置断点并检查semesters
  • semesters 是一个空列表,因此没有任何要过滤的内容。
  • 在过滤器中添加项目之前,您应该考虑清除列表框。
  • 当我之前添加清除列表框时,我没有得到任何项目
  • 根据你的帖子,这就是你想要的。我们不知道您从哪里获得 semesters 列表,因为您只是创建一个空列表并将其传递给 GetList

标签: c# list linq


【解决方案1】:
List<SemesterDetails> semesters = new List<SemesterDetails>();
GetList(semesters);

这是一个空列表。

public void GetList(List<SemesterDetails> modules)
{
    string filter = txtFilter.Text;
    foreach (var item in modules.Where(m => m.ModuleName.Contains(filter)))
    {
        LstModules.Items.Add(item);
    }
} 

由于您传入的是一个空列表,foreach 将被执行 0 次,因此无法添加任何内容。

在这种情况下过滤是无关紧要的。

列表框中的项目未过滤

在您的代码中,您从未删除列表框中已经存在的项目。因此,列表框的内容不可能减少。

当我之前添加清除列表框时,我没有得到任何项目

如果您清除列表然后不向其中添加项目(如上所述),则空列表确实是合乎逻辑的结果。

【讨论】:

  • 如何让列表框删除值?
  • @Jacob:当逐字粘贴到您选择的搜索引擎中时,该问题会立即得到回答。其次,您在发表上述评论前两分钟评论了“当我之前添加清晰的列表框时,我没有得到任何项目”,所以您似乎已经知道答案了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2016-06-14
  • 2019-05-09
  • 2011-01-18
  • 2015-05-13
相关资源
最近更新 更多