0

私は C# WinForms アプリで VS2012 で作業しています。デフォルトでは、DataGridView の列ヘッダーをクリックすると、その列は昇順で並べ替えられません。列ヘッダーをもう一度クリックすると、降順で並べ替えることができます。

そのため、最初のクリックで降順で並べ替え、2 回目のクリックで昇順で並べ替えますが、これを行う方法がわかりませんでした。誰か知っていますか?

4

1 に答える 1

1

常に順番に並べ替えたい場合は、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); 
     }
}
于 2013-11-14T08:30:03.457 に答える