DataGridViewでBindingSourceを持つC#フィルターオブジェクト

BindingSource でデータをフィルタ処理するのに問題があります。データを DataGridView にリストしています。

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つのクライアントに表示されている」という意味です何が表示されていますか?何を期待していますか?
追加された 著者 ninja coder,
私のBindingSourceには "Test1"と "Test2"というクライアントがあります。 Test1という名前をフィルタリングしたいのですが、何も起こりません。 BindingListでも試してみた
追加された 著者 Sony,

4 答え

データバインディングの前にリストをフィルタリングすることができます。

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

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

dataGridView1.DataSource = filtered;
0
追加された

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

enter image description here

これを解決するには、 IBindingListView を実装してから BindingSource にバインドする必要があります。フィルタの機能を実装できるためです。

You can follow the steps described in this article to implement the IBindingListView. 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が私のclient_1に接続されているとします。最初のDataGridViewでclient_1を選択した場合は、それらをフィルタリングします。私はIBindingListViewでこれをプログラムすることができるはずですが、私はよりよい解決策を最初に求めたいです。

0
追加された

バインディングソースがこのようにフィルタリングを処理しているかどうかを確認できます。

clients.SupportsFiltering.ToString()

In your case, filtering is not supported. To solve this, you can implement IBindingListView interface on it. See : Implementing the IBindingListView for filtering

0
追加された