.NET以前にWindowsフォームで作成したアプリケーションを修正する機会があり、BindingSourceについて理解が深まったので、記録を残しておく。「TextBoxに入力した値をバリデーションして、正しい値ならば紐づいたDBのレコードを更新する」というよくある処理を実装する場合、BindingSourceを使用してBindingを行うと以下のようなケースで便利だった。バリデーションでエラーになったら、変更前の値を復元したいバリデーション処理は、Validatingイベントを使用すると思うが、パラメータから取得できる値、TextBoxフィールドの値も変更後の値になっている。このままでは変更前の値を取得できないため、変更前の値を格納するフィールドを用意すると思うが、実はBindingSourceを使っていると変更前のフィールドがいらなくなる。それは、BindingSourceから名前付きDataRowを取得でき、それが入力前の値を持っているからだ。名前付きDataRowの取得、入力前の値の取得は、以下のように行う。DataRowVersion.Original].ToString();}//originalTextを使用して変更前の値を代入する処理などレコードを更新する時に、値が変更されている場合のみ更新したいバリデーション後の更新では、Validatedイベントを使用すると思うが、値が変更されていないのに毎回DBに接続して更新するのもムダなので、値が変わった場合のみ更新をしたい。DBから取得した値と比較する方法があるが、対象が1つの画面からしか更新されない場合、取得のために毎回DBに接続すると、DB接続回数が増えてしまう。上記の変更前の値を使用して、入力値と比較する事もできるが、実はBindingSourceを使っているともっと簡単な方法がある。それは、BindingSourceから取得できる名前付きDataRowが、変更情報を持っているからだ。変更されたかどうかの判定は以下のように行う。//rowは、名前付きDataRowクラス名のインスタンス。取得方法は上記と一緒。//データが変更された場合に行う処理(DB更新処理など)}以上。年の人気記事ラン...2018-08-30Excel読込でNPOIをEPPlusのように使うため拡張メソッドを作成したなぜEPPlusを直接使わないかは、過去の記事を参照。(1)注目記事はてなブログをはじめよう!redwarriorさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。