VB.NET DataGridView ソートする方法 ソート禁止設定

DataGridViewのデータをソートする方法をご紹介します。

DataGridViewの初期設定では、
列の一番上の項目(カラムヘッダー)をクリックすると、
自動でソートされるようになっています。

上記、Noをクリックすると、昇順でソートされる。

上記、もう一度 Noをクリックすると、降順でソートされる。

プログラムからソートさせる方法

プログラムから手動でソートさせる事もできます。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    '列ソートを禁止にする
    DataGridView1.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
    DataGridView1.Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
    DataGridView1.Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable
    DataGridView1.Columns(3).SortMode = DataGridViewColumnSortMode.NotSortable
End Sub

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    DataGridView1.Sort(DataGridView1.Columns(3),
                       System.ComponentModel.ListSortDirection.Descending)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    DataGridView1.Sort(DataGridView1.Columns(0),
                       System.ComponentModel.ListSortDirection.Ascending)
End Sub

まず、DataGridViewの「カラムヘッダークリック」で
ソートする機能をオフにしておきます。

DataGridView1.Columns(0).SortMode =
DataGridViewColumnSortMode.NotSortable

これでカラムヘッダーをクリックしてもソートされなくなります。
(1カラムごとに設定する必要があります)

全てのカラムで同じ設定にしたい場合には、
For Each文が便利です。

For Each c As DataGridViewColumn In DataGridView1.Columns
    c.SortMode = DataGridViewColumnSortMode.NotSortable
Next c

実際にソートさせるには、Sortメソッドを使用します。
第1引数にはソート基準となるカラムを指定し、
第2引数に昇順か降順かを指定します。

上記、ボタン1クリックで「価格」でソート(降順)

上記、ボタン2クリックで「No」でソート(昇順)