私は C# WinForms アプリで VS2012 で作業しています。デフォルトでは、DataGridView の列ヘッダーをクリックすると、その列は昇順で並べ替えられません。列ヘッダーをもう一度クリックすると、降順で並べ替えることができます。
そのため、最初のクリックで降順で並べ替え、2 回目のクリックで昇順で並べ替えますが、これを行う方法がわかりませんでした。誰か知っていますか?
私は C# WinForms アプリで VS2012 で作業しています。デフォルトでは、DataGridView の列ヘッダーをクリックすると、その列は昇順で並べ替えられません。列ヘッダーをもう一度クリックすると、降順で並べ替えることができます。
そのため、最初のクリックで降順で並べ替え、2 回目のクリックで昇順で並べ替えますが、これを行う方法がわかりませんでした。誰か知っていますか?
常に順番に並べ替えたい場合は、Descending
次のコードを試してください。
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name],ListSortDirection.Descending);
}
交互に降順で開始し、次に 2 番目の昇順で開始する場合。次のように、(少なくともフォームで) グローバル変数を宣言できます。
Boolean lastSortedAscending = false;
次に、ColumnHeaderMouseClick
イベントはおそらく次のようになります。
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
lastSortedAscending = !lastSortedAscending;
if ( lastSortedAscending)
{
dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name],ListSortDirection.Descending);
}
else
{
dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name],ListSortDirection.Ascending);
}
}
または、グローバル変数を宣言せずに、次のようにすることもできます。
void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dataGridView1.SortOrder.ToString() == "Ascending") // Check if sorting is Ascending
{
dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name],ListSortDirection.Descending);
}
else
{
dataGridView1.Sort(dataGridView1.Columns[dataGridView1.SortedColumn.Name],ListSortDirection.Ascending);
}
}