【问题标题】:How to filter a listbox using a combobox如何使用组合框过滤列表框
【发布时间】:2011-01-18 12:25:11
【问题描述】:

如何使用 c# 和 windows 窗体使用组合框过滤列表框中的项目?

列表框包含文件,组合框需要按扩展名过滤它们

请帮助我是编程新手

【问题讨论】:

  • 你能提供你想要做什么的代码 sn-p 吗?这个问题是可以解决的,但采取的方法很大程度上取决于您如何填充这些组合框和列表框。

标签: c# combobox listbox filter


【解决方案1】:

这几乎与您上一个问题完全相同。同样的答案也适用。

在组合框的选定索引更改事件中,我会根据从组合框中选择的过滤器将项目添加到列表框中。您可以使用 System.IO.DirectoryInfo 过滤给定文件扩展名的目录。

//Clear your listBox before filtering if it contains items
if(yourListBox.Items.Count > 0)
   yourListBox.Items.Clear();
DirectoryInfo dInfo = new DirectoryInfo(<string yourDirectory>);                                 
FileInfo[] fileInfo = dInfo.GetFiles("*" + <string yourChosenFileExtension>);
foreach (FileInfo file in fileInfo)
{  
   yourListBox.Items.Add(file.Name);
}

Filtering a texbox with a combobox

【讨论】:

  • 是的,我知道很抱歉,我决定将其更改为列表框更有意义。我试过这段代码,但它似乎只是将它添加到列表的底部而不是过滤它
  • 你是对的。我很抱歉。请参阅我上面的编辑。如果列表框包含任何内容,请在应用过滤器之前清除它。
  • 很高兴我能帮上忙。不要忘记接受这个答案作为正确答案:D。
【解决方案2】:

您可以将项目加载到数据表中并将数据表分配给 listbox.datasource 属性。然后你可以在DataTable上设置Filter属性来过滤项目。

另一种方法是将项目保存在单独的列表中,一旦 ComboBox 的 SelectedItem 发生更改,将实现过滤器的 linq 查询分配给 ListBox.DataSource 属性。

【讨论】:

    【解决方案3】:

    您需要处理 ListBox 的数据源,说它是一个文件名列表
    完整的扩展:

    List<string> files = new List<string>();  // sample DataSource
    

    从 ComboBoxto 中获取选定的扩展名并使用它来订购 ListBox 数据源(文件)。

           string fileExtemsion;               
    
           var orderedFiles = files.OrderBy(o => o.EndsWith(fileExtemsion)); // order          
    
           listBox.DataSource = orderedFiles;       // setting Datasource 
           listBox.DataBind();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多