投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/6/4 16:36:07
追記:
先のコードは、列の SortMode プロパティが Automatic という前提です。

> e.SortResult = StrCmpLogicalW(e.CellValue1, e.CellValue2)

Option Strict On の場合は上記を
 e.SortResult = StrCmpLogicalW(e.CellValue1?.ToString(), e.CellValue2?.ToString())
にします。


> また降順にしたい時はAPIの呼び出しにオプション引数等が必要なのでしょうか?
DataGridView 側でソート方向を見繕うので、呼び方は変わらないです。

ソートモードをプログラム制御する場合は、ColumnHeaderMouseClick イベントにて、
たなやんさんが書かれたように ​DataGridView1.Sort(System.Collections.IComparer) を呼び出します。

この場合、IComparer.Compare メソッドの引数は DataGridViewRow 型となりますので、
やろうと思えば複数列によるソートを実装することも出来るでしょう。
複数列ソートの場合に、ソート方向を表す三角グリフを描画したい場合には、
    dgv.Columns(0).HeaderCell.SortGlyphDirection = SortOrder.Ascending
    dgv.Columns(1).HeaderCell.SortGlyphDirection = SortOrder.Descending
などとして個別にマークします。