C# datagridview绑定源筛选器

C# datagridview绑定源筛选器,c#,datagridview,filter,bindingsource,C#,Datagridview,Filter,Bindingsource,我试图从BindingSource中过滤数据,但它不起作用。 我做错了什么? 我将代码简化为一个简单的示例 问题是,如果我在文本框中输入了什么,什么都不会发生 public partial class Form1 : Form { BindingSource bs = new BindingSource(); public Form1() { InitializeComponent(); List<myObj> myObjLi

我试图从BindingSource中过滤数据,但它不起作用。 我做错了什么? 我将代码简化为一个简单的示例

问题是,如果我在文本框中输入了什么,什么都不会发生

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; }
}
公共部分类表单1:表单
{
BindingSource bs=新的BindingSource();
公共表格1()
{
初始化组件();
List myObjList=新列表();
添加(新的myObj(“LastNameA”、“Peter”);
添加(新的myObj(“LastNameA”、“Klaus”);
添加(新的myObj(“LastNameB”、“Peter”);
foreach(myObj列表中的myObj对象)
{
bs.增补(obj);
}
dataGridView1.DataSource=bs;
}
私有void textBox1\u TextChanged(对象发送方,事件参数e)
{
bs.Filter=string.Format(“名称类似“{0}%””,textBox1.Text);
dataGridView1.Refresh();
}
}
公共类myObj
{
公共myObj(字符串LastName,字符串名称)
{
this.LastName=LastName;
this.Name=Name;
}
公共字符串LastName{get;set;}
公共字符串名称{get;set;}
}
上面写着:

仅限实现IBindingListView接口的基础列表 支持过滤

替换这个

 List<myObj> myObjList= new List<myObj>();
List myObjList=newlist();
用这个

 BindingList<myObj> myObjList= new BindingList<myObj>();
BindingList myObjList=newbindingList();

到目前为止,这对我很有效

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; }
}
公共部分类表单1:表单
{
BindingSource bs=新的BindingSource();
BindingList myObjList=新建BindingList();
公共表格1()
{
初始化组件();
添加(新的myObj(“LastNameA”、“Peter”);
添加(新的myObj(“LastNameA”、“Klaus”);
添加(新的myObj(“LastNameB”、“Peter”);
bs.DataSource=myObjList;
dataGridView1.DataSource=myObjList;
}
私有void textBox1\u TextChanged(对象发送方,事件参数e)
{
BindingList filtered=新的BindingList(myObjList.Where(obj=>obj.Name.Contains(textBox1.Text)).ToList());
dataGridView1.DataSource=已筛选;
dataGridView1.Update();
}
}
公共类myObj
{
公共myObj(字符串LastName,字符串名称)
{
this.LastName=LastName;
this.Name=Name;
}
公共字符串LastName{get;set;}
公共字符串名称{get;set;}
}

}

我已经阅读了MSDN文档,现在已经应用了BindingList。但是如果我在文本框中键入字母,则不会发生任何事情
BindingList
不会实现
IBindingListView