- - PR -
変更された行内で計算
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-11-09 08:41
こんにちわ。色々と試してみているのですがどうも上手く出来ずに質問させていただきました。よろしくお願いいたします。
やりたいことは変更された行内で計算を行うことです。 DataColumnのExpressioプロパティに式を入力できればいちばん簡単なのですが、ADO.Netで使用可能な演算子だけで計算を行うことができません。そのため、コードで計算して行の更新時に計算された値を保存したいと思っているのですが、RowChangedイベントから with e.row .item("A") = calc.calclation(.item("B"), .item("C")) .item("D") = calc.calclation(.item("C"), .item("E")) end with (calcは計算用に作成したクラスのインスタンスです。) と書いてみたのですが、上記2行目を実行した時点で再度RowChangedイベントが発生してしまい無限ループに入ってしまいます。 処理の前にe.row.BeginEditを実行しておけばいいのではないかと試してみたのですが、なぜか上記2行目が実行された時点でRowChanged呼び出しのメソッドに戻ってしまたりと・・・うまくできないで困っています。 ぜひアドバイスお願いいたします。 |
|
投稿日時: 2002-11-09 11:44
根本的な解決法ではありませんがRowChangedイベントを以下のようにすると
とりあえず無限ループは回避できないでしょうか。 with e.row If .item("A") <> calc.calclation(.item("B"), .item("C")) Then .item("A") = calc.calclation(.item("B"), .item("C")) End If If .item("D") <> calc.calclation(.item("C"), .item("E")) Then .item("D") = calc.calclation(.item("C"), .item("E")) End If end with |
|
投稿日時: 2002-11-10 07:41
べーちゃんさん。お返事ありがとうございます。
なるほど!この方法は気がつきませんでした。 早速試してみました。 If .item("A") <> calc.calclation(.item("B"), .item("C")) でキャストが発生した時点でRowChangedが呼び出されてしまうようです。 そのため下のように一度変数にキャストした値を代入しその値をチェックするようにしてみたところ無事に動作したのですが・・なにかすごく無駄な処理ですね(^^;; Try a = DirectCast(.Item("A"), Double) b = DirectCast(calc.calclation(.Item("B"),.item("C")), Double) If a <> b Then .Item("A") = calc.calclation(.Item("B"),.item("C")) End If Catch ex As Exception .Item("A") = calc.calclation(.Item("B"),.item("C")) End Try もっとよい方法があればよろしくおねがいいたします。 |
1