投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/6/23 19:18:45
やなやんさんはたなやんさんの同僚の方なのでしょうか。


> データの管理はDataTable一つのみで行っておりDataSetは使用していません。
自分のコードもそうですよ?

DataSet をバインドしているのであれば、DataSource だけでなく、
DataMember も指定しているはず。

そもそも、
 Dim tbl As DataTable = Me.ds.Tables("File")
ですよね。実質的に使っているのは DataTable だけです。

つまり、DataGridView1.DataSource に割り当てているのは DataTable ですし、
Dim q = Me.ds.Tables("File").AsEnumerable() というのも、
Dim q = Me.yourTable.AsEnumerable() でしかありせん。


そして LINQ でソート後、複数行の DataRow を DataTable に復元するのは、
先に示した CopyToDataTable 拡張メソッドです。


なお、DataSource に割り当てられるインスタンスは、
CopyToDataTable によって、毎回、新しいテーブルに差し変わります。

そのため、
> Dim dt As DataTable = CType(DataGridView1.DataSource, DataTable)
などとするのではなく、最初に取得した DataTable / DataSet / DataView 等を
フィールド変数に保持しておき、それをソート対象にするのが良いと思います。