人気ブログランキング | 話題のタグを見る
(.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 にデータ入れるとわけわからなくなる場合もありますしね。)
by jehoshaphat | 2009-03-15 23:27 | .Net開発


<< (VisualStudio)V... (SQL)Access(JET... >>