「ほっ」と。キャンペーン
(.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 にデータ入れるとわけわからなくなる場合もありますしね。)
[PR]
by jehoshaphat | 2009-03-15 23:27 | .Net開発 | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/9842645
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


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