1

このトピックにはかなりの数のスレッドがあることは知っていますが、すべてを試しましたが、まだデータグリッドビューをフィルタリングできません。ユーザーがテキスト フィールドに入力した値に基づいて、datagridview の行をフィルター処理しようとしています。datagridviews データソースは、以下に示すデータソースに設定されています。

だからここに私が使用しているコードがあります。エラーは発生しません。データグリッドビューは単に変更されません。ManufacturerService.GettAll は製造元のリストを返します。それをバインディングリストに変換して

bsManufacturers.DataSource = new BindingList<Manufacturer>(ManufacturerService.GetAll(_ctx));

テキストボックスの textchanged イベントで、このコードが実行されます。ブレークポイントなどで確認しました。フィルター文字列が正しい場合、コードが実行されます。

private void FilterData(string str)
{
    bsManufacturers.Filter = string.Format("Name like '%{0}%'", str);
    dgvManufacturers.Refresh();
}

何か助けはありますか?または、少なくともこれが機能しない理由の説明はありますか? 私はこれに数時間取り組んできましたが、どこにも答えが見つからないようです

4

4 に答える 4

1

データの並べ替え情報は、グリッド ヘッダーに含まれています。ユーザーは、1 つまたは複数のヘッダーに単一または複数の並べ替えを設定できます。プログラミング レベルでは、並べ替えは次のようになります。

//Get top-level header
Header header = grid.Headers[0];

header["Product"].SortDirection = SortDirection.Ascending;
header["Price"].SortDirection = SortDirection.Descending;

プロパティを false に設定Column.Sortableするだけで、ソフトウェアのみの並べ替えを有効にして、ユーザーが UI dapfor を介して変更できないようにすることができます。コム

于 2012-10-27T06:02:05.513 に答える
0

私はこのプロジェクトを使用してこの問題を解決しました:http: //blw.sourceforge.net/

個人的には、これを行うためのより良い方法があるはずだと思いますが、それは現在機能しており、今のところ「十分に良い」ことに満足しなければならないと思います。

これが動作するコードです。とにかく重要な部分。

private void PopulateDataGridView()
{
     blvManufacturers = new BindingListView<Manufacturer>(ManufacturerService.GetAll(_ctx));
    _bsManufacturers = new BindingSource { DataSource = _blvManufacturers};
    dgvManufacturers.DataSource = _bsManufacturers;         
}

private void FilterData(string str)
{
    // Change the filter of the view.
      blvManufacturers.ApplyFilter(
        delegate(Manufacturer manu)
        {
            // uses ToLower() to ignore case of text.
            return manu.Name.ToLower().Contains(str.ToLower());
        }
    );           
}
于 2012-07-09T09:54:32.770 に答える
0

これにバインディング リストを使用する必要はないと思います。「バインディング ソース」のデータ ソースとして DataTable を使用する方がよい場合があります。

次に、FilterData メソッドで次を使用できます:-

DataTable.DefaultView.RowFilter = string.format("Name like '%{0}%'", str);

次のように設定します:-

Binding Source.Datasource = DataTable,
DatagridView.Datasource = Binding Source;

これを行うと、datatgrid を更新する必要さえなく、自動的に更新されます。

お役に立てれば。

于 2012-07-09T08:28:31.847 に答える
0

データグリッド ビューでフィルターを作成するライブラリがあります。

DataGridView フィルター ポップアップ

よろしく

于 2012-07-09T06:39:10.813 に答える