「アクセスする Original データがありません。」と言われたら[プログラミング]
(2024-04-04 20:29:45) by shinoda
VB.NET で画面の表にバインドしているデータテーブルの中身を、編集前、編集後の値で比較してほげほげしたいという処理がある。
データテーブルのレコード自体は、編集前のものであれば列名の後ろに DataRowVersion.Original というバージョン情報を引数で設定してやればいい。
編集前は dr("人数", DataRowVersion.Original) 、編集後の値は dr("人数") という具合
そこで、例えば職種をキーとしたハッシュテーブル(連想配列)に編集前と編集後の人数をセットしていって、あとで同じキー(同じ職種)の人数の変異を見たいと思って、
For Each dr As DataRow In DataTable1.Rows
HTOld(dr("職種", DataRowVersion.Original).ToString) = dr("人数", DataRowVersion.Original).ToString
HTNew(dr("職種").ToString) = dr("人数").ToString
Next
なんてやると、編集前の値のない行(つまり、追加された行)データが出てくると、
System.Data.VersionNotFoundException: 'アクセスする Original データがありません。'
という例外が発生する。
Not IsDBNull(dr("職種", DataRowVersion.Original)) とかしたら回避できるかなとも思ったけど、データがそもそも無いので Null でもない。
Try で例外引っ掛けて、それを「オリジナル行のない追加されたデータである」と判断してもいいかなとも思ったが、結局、RowState をチェックすることで回避した。
If dr.RowState <> DataRowState.Added Then
HTOld(dr("職種", DataRowVersion.Original).ToString) = dr("人数", DataRowVersion.Original).ToString
End If
If dr.RowState <> DataRowState.Deleted Then
HTOld(dr("職種") = dr("人数").ToString
End If
みたいな感じ。
他にきれいなやり方があるのなら教えてほしい>VB.NET マスターの皆さん
Perl 使いの俺としては、こういう処理で引っかかるの、本当に面倒くさくていや(笑)
コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る
Powered by
MT4i 3.0.8