評価
良い / 悪い = 9 / 1 (「良い」の割合 = 0.900 , 人気度 = 0.900 )
評価する
- 人を不快にさせる内容の投稿は絶対にしないでください。悪質な投稿者には、予告なく罰則(閲覧禁止やIP公開等)を科します。
- この記事だけでない、全般的なご提案は「DOBON.NETへの提案」に、ご意見は「お気楽掲示板」に投稿してください。
- 5文字以上、1000文字以下のコメントしか投稿できません。
- HTMLタグは使用できません。
Copyright(C) DOBON!. All rights reserved.
Office Exe 2022/10/7 (Fri) 01:34:38
とご説明があるとおり、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;
}
要するにデータソースを再設定する、というだけなのですが、比較手少ない労力で問題に対処できるかと思います。
以上、もし別の方法があればご教授下さい。