如何在文本框改变时过滤掉列表?

时间:2014-03-29 09:40:54

标签: c# .net windows-forms-designer

在我的c# Windows窗体应用中,我有一个学生列表Student)。 ArrayList students = new ArrayList(); 有一个文本框列表框

Student称为studentId。因此,当我在文本框中输入数字时,应用程序应过滤掉数组列表(自动完成),并在列表框中显示建议。< / p>

private void textBoxNameForID_TextChanged(object sender, EventArgs e)
{
      // MessageBox.Show("Changed: " + " Text is: " + textBoxNameForID.Text);
      if (studentsSortedList != null) 
      {     
            foreach (Student stu in students)
            {       
                 bool contains = stu.ID.ToString().Contains(textBoxNameForID.Text);
                 if (contains) 
                 {
                      MessageBox.Show("Changed: " + " Text is: " + textBoxNameForID.Text);
                 }
            }
       }
 }

我已经尝试过了,并没有找到我的期望的结果。请帮我解决这个问题

2 个答案:

答案 0 :(得分:2)

这是用于ID的StartsWith 使用HashSet。学生列表或数组 即使ID是整数,您也需要使用字符串

public IEnumerable<string> Students 
{
    get
    {
        return studentsSS
               .Where(x => x.StartsWith(studentID));
    }
}

答案 1 :(得分:1)

ArrayList更改为List<Student>,然后只使用已过滤的列表设置listbox的数据源:

private void textBoxNameForID_TextChanged(object sender, EventArgs e)
{
   listBox1.DataSource = students.Where(s => s.Id.StartsWith(textBoxNameForID.Text)).ToList();
}

listBox DisplayMember设置为Student类中的属性名称。举个例子:

listBox1.DisplayMember = "Display";

其中Display可以是:public string Display { get { return Id + ":" + Name; } }