VB(.net) Windows10 WinForms・DataGridViewのColumnHeaderのソートを示す三角だけ操作する
記のようなコードを実行した際、右側のカラムをクリックした際、ソートはされないがソートを示す三角形が「昇順→降順→ソートなし」の順に変化する。
コード
Imports System.ComponentModel Public Class Form1 'ソートの状態を保存する変数 Dim sordOrder As SortOrder = SortOrder.None Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '以下はDataGridViewのデータ表示用コード Dim table As DataTable = New DataTable() table.Columns.Add("col1") table.Columns.Add("col2") table.Rows.Add({1, 1}) table.Rows.Add({2, 2}) table.Rows.Add({4, 4}) table.Rows.Add({3, 3}) DataGridView1.DataSource = table '自動ソートを停止 DataGridView1.Columns.Item(1).SortMode = DataGridViewColumnSortMode.Programmatic End Sub Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick '右側のカラムでのみ、「ソートなし」処理を実装 If e.ColumnIndex = 1 Then Dim vc As DataGridViewColumn = DataGridView1.Columns.Item(e.ColumnIndex) 'すでにソート中であれば、次のソート状態を保持 sordOrder = GetNextOrder(sordOrder) '※データの独自ソートを行いたい場合は、ここでデータのソートを実施 'カラムヘッダーの矢印を現在のソート状態に合わせる vc.HeaderCell.SortGlyphDirection = sordOrder End If End Sub 'ソート順を受け取り、次のソート順を返す Private Function GetNextOrder(sortOrder As SortOrder) As SortOrder Dim rtn As SortOrder Select Case sortOrder Case SortOrder.Ascending rtn = SortOrder.Descending Case SortOrder.Descending rtn = SortOrder.None Case SortOrder.None rtn = SortOrder.Ascending End Select Return rtn End Function End Class