2017-10-17 87 views
0

我在BindingSource中过滤我的数据时遇到问题。我将数据列在DataGridView中。在DataGridView中使用BindingSource过滤对象

class client 
{ 

    public int id { get; set; } 
    public String name { get; set; } 


    public client(String name) 
    { 
     this.name = name; 
     this.id = 0; 
    } 
}  

BindingSource clients = new BindingSource(); 

clients.Add(new client("Test1")); 
clients.Add(new client("Test2")); 

dataGridView_clients.AutoGenerateColumns = false; 
dataGridView_clients.ColumnCount = 2; 

dataGridView_clients.Columns[0].Name = "id"; 
dataGridView_clients.Columns[0].DataPropertyName = "id"; 

dataGridView_clients.Columns[1].Name = "name"; 
dataGridView_clients.Columns[1].DataPropertyName = "name"; 

dataGridView_clients.DataSource = clients_source; 

clients.Filter = string.Format("Name = 'Test1'"); 
dataGridView_clients.Refresh(); 

我在做什么错?过滤器不起作用,它将显示在最后两个客户端中。

+0

你能解释一下你的意思是“它被显示在过去的两个客户端”。正在显示什么?你在期待什么? –

+0

我在我的BindingSource中有客户端“Test1”和“Test2”。现在我想要筛选名称Test1,但没有任何反应。也用BindingList试了一下 – Sony

回答

0

您可以检查您的绑定源过滤处理这样

clients.SupportsFiltering.ToString() 

在你的情况下,不支持过滤。 为了解决这个问题,你可以在其上实现IBindingListView接口。 请参阅:Implementing the IBindingListView for filtering

0

感谢您的答案!我会试着建立这个过滤器,这似乎很困难。有没有更简单的解决方案?我想制作一个过滤器来列出客户的报价。

我有两个DataGridViews。 如果我现在有4个名为“offer_1”,“offer_2”,“offer_3”和“offer_4”的优惠,且优惠1和优惠2连接到我的client_1。如果我在第一个DataGridView中选择client_1,我想过滤它们。我应该可以用IBindingListView编写这个程序,但我想先问一下更好的解决方案。

0

你可以在数据绑定前筛选列表:

List<client> clients = new List<client> { new client("Test1"), new client("Test2") }; 

List<client> filtered = clients.FindAll(c => c.name == "Test2"); 

dataGridView1.DataSource = filtered;