2017-10-17 33 views
0

BindingSourceでデータをフィルタリングする際に問題が発生します。私はDataGridViewにデータを掲載しています。DataGridViewのBindingSourceを使用したC#フィルタオブジェクト

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(); 

私は間違っていますか?フィルターが機能せず、最後の2つのクライアントに表示されます。

+0

あなたは「それは最後の2つのクライアントに表示されている」によって何を意味するか説明してもらえます。何が表示されていますか?あなたは何を期待していますか? –

+0

BindingSourceに "Test1"と "Test2"というクライアントがあります。今私はTest1の名前をフィルターに入れたいが、何も起こらない。また、BindingListで試してみました – Sony

答えて

0

問題は、デフォルトではBindingSourceがフィルタリングをサポートしていないためです。コードをデバッグすると、SupportsFilteringというプロパティがfalseであることがわかります。この問題を解決するには

enter image description here

、あなたは、フィルタが動作する方法を実装することができますので、IBindingListViewを実装し、あなたのBindingSourceに、その後バインドする必要があります。

この資料に記載されている手順に従って、IBindingListViewを実装することができます。あなたのバインディングソースは、あなたの場合には、この

clients.SupportsFiltering.ToString() 

のようにフィルタリング扱うかどうかをチェックすることができます https://blogs.msdn.microsoft.com/winformsue/2007/12/07/implementing-the-ibindinglistview-for-filtering/

0

回答ありがとうございました!私はこのフィルタを構築しようとする、それは非常に難しいようだ。多分もっと簡単な解決策がありますか?クライアントのオファーを一覧表示するフィルタを作成したい

私は2つのDataGridViewを持っています。 "offer_1"、 "offer_2"、 "offer_3"、 "offer_4"という4つのオファーがあり、オファー1とオファー2が私のクライアントに接続されています。最初の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; 
関連する問題