電気ウナギ的○○

About Home

「アクセスする Original データがありません。」と言われたら

shinoda (2024年4月 4日 20:29)
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 使いの俺としては、こういう処理で引っかかるの、本当に面倒くさくていや(笑)

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/6764

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE