AXIS合同会社代表(熊本在住40代おっさん)が日々戯言を書きなぐるブログです。
【C#】配列をDataGridViewにバインドしてフィルターをサクサクする

【C#】配列をDataGridViewにバインドしてフィルターをサクサクする

どうも、ハードキャッスル・エリザベス・・・じゃなくてはっし~です。

最近ずっと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秒位で読み込んで、フィルターもソートも十分使えるレベルで動きました。
※上記ソースは余分なとこ削って最低限にしてるんで、そのままだとちょっと不都合あるけど。

でわでわ

LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です