投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/6/24 10:47:38
> テーブル列(FullPath)を文字列ではなく列番号で指定することは可能でしょうか?
そういう実装に書き換えるだけで良いと思いますが、どの点が問題になっているのでしょうか?

先のサンプルで、列番号ではなくあえて列名を使用したのは、
「DataGridView の列番号」と「DataTable の列番号」を混同しないようにするため、
あえて違う型にしただけです。

たとえば、DataGridView にバインドさせていない非表示列をソート用に使うこともできますが、
まず、クリックした列をそのままソートに使いたいのであれば、
  Dim fieldName = DataGridView1.Columns(e.ColumnIndex).DataPropertyName
のようにして、DataTable の列名を受け取ることができます。


そもそも、今回のソートの肝となるのは
>> Public Overrides Function Compare(x As DataRow, y As DataRow) As Integer
に対する
>> Return StrCmpLogicalW(x(fieldName)?.ToString(), y(fieldName)?.ToString())
なわけですよね。

DataRow のインデクサには、
 『列名』な String
 『列番号』な Integer
 『列オブジェクト』な DataColumn
のいずれも受け付けるので、列番号で渡せるようにしたいのであれば、
単にそういう型の変数や引数を用意するだけで、列番号指定バージョンに作り替えられるでしょう。
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarow.item?view=netframework-4.8#System_Data_DataRow_Item_System_Data_DataColumn_