どうも、ハードキャッスル・エリザベス・・・じゃなくてはっし~です。
最近ずっとEclipceでjavaとにらめっこしてたんですが、突然のC#案件でこねくり回した配列データをDataGridViewに表示してフィルターかけたりソートしたりって作業にちょいと手間取ったので、備忘録代わりに残しときます。
DataTable dt = new DataTable();
BindingSource bs = new BindingSource();
// DataTableの列設定
dt.Columns.Add("col1", Type.GetType("System.Int32"));
dt.Columns.Add("col2", Type.GetType("System.String"));
dt.Columns.Add("col3", Type.GetType("System.String"));
dt.Columns.Add("col4", Type.GetType("System.String"));
dt.Columns.Add("col5", Type.GetType("System.String"));
// CSVを配列に格納
string[] lines = File.ReadAllLines("<CSVファイルパス>", Encoding.GetEncoding("Shift-JIS"));
// 1行毎にDataTableへセット
foreach (string line in lines) dt.Rows.Add(line.Split(','));
// BindingsourceへDataTableをセット
bs.DataSource = dt;
dataGridView1.DataSource = bs;
CSVから取得して表示するだけなら、DataAdapterでいけるけど、こねくり回した配列を想定しているので、とりあえずCSVを行配列に格納して列配列をDataTableに繰り返し挿入後バインドって流れになってます。
これで、BindingSourceのFilterでサクサク抽出できますし、DataGridViewにそのままデータ突っ込むよりも快適に列ソートとかも動くと思います。
実際に使うときは、デザインビューでDataGridViewとBindingSourceは用意してDataGridViewのDataSourceにBindingSourceを指定、DataPropertyNameに列名を指定しておけば、列タイトルとか幅とかも決めておけます。
郵便番号データCSVの全国版(124,427件)でテストしたけど、2秒位で読み込んで、フィルターもソートも十分使えるレベルで動きました。
※上記ソースは余分なとこ削って最低限にしてるんで、そのままだとちょっと不都合あるけど。
でわでわ