2013-06-25 2 views
4

Я пытаюсь отфильтровать данные из BindingSource - но он не работает. Что я делаю неправильно? Я сократил свой код до минималистического примера.фильтр источника привязки datagridview

Проблема в том, что если я ввожу что-то в TextBox - ничего не происходит.

public partial class Form1 : Form 
{ 
    BindingSource bs = new BindingSource(); 

    public Form1() 
    { 
     InitializeComponent(); 
     List<myObj> myObjList= new List<myObj>(); 
     myObjList.Add(new myObj("LastNameA", "Peter")); 
     myObjList.Add(new myObj("LastNameA", "Klaus")); 
     myObjList.Add(new myObj("LastNameB", "Peter")); 

     foreach (myObj obj in myObjList) 
     { 
      bs.Add(obj); 
     } 
     dataGridView1.DataSource = bs; 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     bs.Filter = string.Format("Name LIKE '%{0}%'", textBox1.Text); 
     dataGridView1.Refresh(); 
    } 

} 

public class myObj 
{ 
    public myObj(string LastName, String Name) 
    { 
     this.LastName = LastName; 
     this.Name = Name; 
    } 

    public string LastName { get; set; } 
    public string Name { get; set; } 
} 

ответ

4

Это работает для меня до сих пор

public partial class Form1 : Form 
{ 
    BindingSource bs = new BindingSource(); 
    BindingList<myObj> myObjList = new BindingList<myObj>(); 

    public Form1() 
    { 
     InitializeComponent(); 

     myObjList.Add(new myObj("LastNameA", "Peter")); 
     myObjList.Add(new myObj("LastNameA", "Klaus")); 
     myObjList.Add(new myObj("LastNameB", "Peter")); 

     bs.DataSource = myObjList; 

     dataGridView1.DataSource = myObjList; 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     BindingList<myObj> filtered = new BindingList<myObj>(myObjList.Where(obj => obj.Name.Contains(textBox1.Text)).ToList()); 

     dataGridView1.DataSource = filtered; 
     dataGridView1.Update(); 
    } 

} 

public class myObj 
{ 
    public myObj(string LastName, String Name) 
    { 
     this.LastName = LastName; 
     this.Name = Name; 
    } 

    public string LastName { get; set; } 
    public string Name { get; set; } 
} 

}

0

The MSDN Documentation говорит:

только лежащие в основе списков, которые реализуют фильтрацию поддержки IBindingListView интерфейса .

Заменить этот

List<myObj> myObjList= new List<myObj>(); 

с этим

BindingList<myObj> myObjList= new BindingList<myObj>(); 
+0

Я прочитал документацию MSDN теперь применили BindingList. Но если буквы типа i в TextBox - ничего не происходит – Blindsurfer

+1

'BindingList ' не реализует 'IBindingListView'. – NathanAldenSr