0

私は .net 2.0 を使用して Windows アプリケーションに取り組んでいます。UI アプリケーションにはデータグリッドがあり、データは XML ファイルから取り込まれます。データ グリッドには 500 を超える行があります。ソート機能が実装されました。ただし、顧客は、ユーザーが最初の 3 文字を入力するテキスト ボックスのある列の 1 つで、検索オプションまたは検索機能を希望しており、グリッドで検索する必要があり、特定の検索で始まる関連行を表示する必要があります。基準。

これを実装する方法を教えてください....ありがとう

4

2 に答える 2

0

データの完全なコレクションを保存し、フィルターを実行する必要がある場合は、フィルター処理されたコレクションを作成し、フィルター処理されたコレクションをグリッドにバインドします。FilterGridDataを呼び出して、適切なテキスト変更イベントをフィルターボックスに接続するだけです。複数列を介してフィルタリングする場合にもうまく機能します。ああ、ここでBindingListを使用する必要はありません。グリッドにバインドするデータソースを使用します。これの核となるのは、「LINQでフィルタリングしてフィルタリングされたコレクションを作成する」ことです。

    BindingList<Foo> _allFoos;

    private void LoadData(IEnumerable<Foo> dataToDisplayInGrid)
    {
        this._allFoos = new BindingList<Foo>(dataToDisplayInGrid.ToList());
        this.FilterGridData(string.Empty);
    }

    private void FilterGridData(string filterText)
    {
        BindingList<Foo> filteredList = null;
        if (!string.IsNullOrEmpty(filterText))
        {
            string lowerCaseFilterText = filterText.ToLower();
            IList<Foo> filteredItems = this._allFoos.Where(x => (x.Name ?? string.Empty).ToLower().Contains(lowerCaseFilterText)).ToList();
            filteredList = new BindingList<Foo>(filteredItems);
        }
        else
        {
            filteredList = new BindingList<Foo>(this._allFoos);
        }

        dataGrid.DataSource = filteredList;
    }
于 2012-08-09T15:12:48.020 に答える
0

BindingSource オブジェクトで Filter オプションを使用できます。

private BindingSource dashBoardBindingSource = new BindingSource();

dashBoardBindingSource.DataSource=<<data source items>>;
dashBoardBindingSource.Filter="Column Name=textbox.text";
datagrid.DataSource = dashBoardBindingSource;
于 2012-08-09T11:55:01.407 に答える