Top > プログラミング > .NET Tips> DataGridViewの行が自動的に並び替えられるようにする

DataGridViewの行が自動的に並び替えられるようにする」への評価、コメント

評価

良い / 悪い = 9 / 1 (「良い」の割合 = 0.900 , 人気度 = 0.900

評価する

コメント一覧


通常のコメント
Office Exe 2022/10/7 (Fri) 01:34:38
『DataGridViewのDataSourceプロパティが設定されており、仮想モードでない場合は、自動的に並び替えられるようです。これは、DataGridViewに自動的に並び替える機能はないが、データソースが自動的に並び替えられたということだと思われます。』

とご説明があるとおり、DataGridViewで一度並べ替えを行うと、以降新規入力データも自動的に並べ替えられてしまいます。

これを回避する方法として、データソースのDefaultView.Sortを無効にして並べ替えを行わないようにする方法はありますが、それですと実際に並べ替えたい時に対応できません。

ヘッダー部分をクリックするなどで手動でソートができ、なおかつ新規入力時には自動的なソートをしないようにする方法を模索していたのですが、この問題はたくさんの方が興味があるようなので、これを実現する方法をご報告しておきます。

DataGridView1というコントロールがあり、そのデータソースがdtDataという名前のDataTableであった場合、

private void DataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//グリッドビューでソートを実行
DataGridView1.Sort(DataGridView1.Columns["ソート対象のコラム名"], ListSortDirection.Ascending);

//ソート済みデータを元に新規テーブルを作成
DataTable dtNew = dtData.DefaultView.ToTable();

//新規テーブルのコピーをデータテーブルに設定(そのまま代入すると参照が解除されません)
dtData = dtNew.Copy();

//グリッドビューのデータソースを再設定
DataGridView1.DataSource = dtData;
}


要するにデータソースを再設定する、というだけなのですが、比較手少ない労力で問題に対処できるかと思います。

以上、もし別の方法があればご教授下さい。

通常のコメント
適当800 2012/11/16 (Fri) 16:02:11
半日悩んでたんですが、このページを拝見して一撃で解決しました。ありがとうございます!

通常のコメント
匿名 2009/11/11 (Wed) 19:03:31
管理人様ありがとうございました。助かりました。
c#版ですが、メソッドSortRowsはこのままでは常に昇順となってしまいましたが、「今までの並び替えグリフを消す」部分と「並び替えの方向(昇順か降順か)を決める」部分の順序を入れ替えたら、無事動作しました。

通常のコメント
annonymouse 2007/11/24 (Sat) 10:34:26
毎度お世話になっています
管理人様ありがとうございます

コメントの投稿

[説明]