(.Net)DataGridView でソートをかけると DataGridViewRow の Tag プロパティが null になる
DataGridView.Sort メソッドで DataGridView 内部の DataGridViewRow に対してソートをかけると、DataGridViewRow.Tagプロパティが null になってしまうようです。
なので、下記のようなコードを書くと Console.WriteLine メソッドのところで例外が発生します。
'DataTable
Private mTable1Dtbl As New Database1DataSet.table1DataTable()
'TableAdapter
Private mTable1Adp As New Database1DataSetTableAdapters.table1TableAdapter()
'DataTableにDBの情報を取得し、DataGridViewにバインドさせる
mTable1Adp.Fill(mTable1Dtbl)
Me.DataGridView1.DataSource = mTable1Dtbl
'DataGridViewRow.Tag プロパティに値代入
Dim j As Integer = 0
For Each row As DataGridViewRow In DataGridView1.Rows
row.Tag = j
j += 1
Next
'ソート
DataGridView1.Sort(DataGridView1.Columns("name2"), System.ComponentModel.ListSortDirection.Descending)
Console.WriteLine("")
For Each row As DataGridViewRow In DataGridView1.Rows
'ここで例外が発生する!!!!!!!!
Console.WriteLine(row.Tag.ToString())
Next
もしかしたら、DataGridView.Sort メソッドは内部的に新しい DataGridViewRow を作ってるのかもしれません。
DataGridView にバインドするオブジェクトを DataView にして、 DataView 上でソートをかけてみましたが、これも結果は同じでした。
まあ、暇があれば、MSから .Net Framework のソース落としてきて調べてみようと思います。
この現象は、知らないとバグの元になっちゃいますね。
こう考えると、Control.Tag はあんまり使わない方がいいんでしょうかね。
(複数人で開発してると、ちゃんと取り決めを設けずに好き勝手に Tag にデータ入れるとわけわからなくなる場合もありますしね。)