質問: c# DataGridViewにて、SQLiteから取得したデータを表示しています。 独自クラスを使ってSQLiteからデータを取得し、for文でDataGridViewにデータをAddしています。 SQLiteに格納してあるデータは10万件あったとして、DataGridViewには一度に1万件を表示し、残りのデータはページングさせて表示しています。 ここまで作って気づいたのですが、DataGridViewのヘッダーをクリックするとソートされますが、当たり前なのですがDataGridViewに表示しているデータ1万件の中だけでソートし、全データでソートしているわけではない、ということに気づきました(アホですみません)。 なぜDataTableを使っていないのかというと、SQLiteへの接続に独自クラスを使っていたためにDataTableを使いませんでした。 あと、SQLite → DataGridViewのほうが、SQLite → DataTable → DataGridViewよりも簡潔だと思ってそうしました。 質問内容は、DataGridViewに全データを格納し(AddもしくはAddRange)、表示だけ1万件のようにLimitはかけれないでしょうか? もし無理でしたら、DataTableを使う方法で作り直そうと思っています。 DataGridViewで全データに対してソート、リミットをかけるにはDataTableを使う方法しかないと考えてよいでしょうか? どうぞよろしくお願い致します。 開発環境: Windows10 + VisualStudio 2015 C#
回答: DataSource には次のいずれかのインタフェースを持つオブジェクトを格納することができます。 * System.Collections.IList * System.ComponentModel.IListSource (DataTable や DataSet はこれ) * System.ComponentModel.IBindingList * System.ComponentModel.IBindingListView (BindingSource はこれ) ですので、独自のデータを格納しているものがあるなら、これらのインタフェースを実装してしまうのも手です。 IBindingListView はフィルタ処理などを定義しているインタフェースですから、これを実装してフィルタ処理を追加するのが良いかもしれません。