none
DataGridView Expressionプロパティで計算した結果をCellValueChangedイベントで他のコントロールへ表示させたい RRS feed

  • 質問

  • 皆様どうぞよろしくお願いします。

    開発環境:WindowsXP 32bit VisualStudio2010Pro VB.NET

    DataGridViewで、バインドしてデータ表示しております。表示されたデータは、直接ユーザーが編集するのですが、

    最終列にExpressionプロパティに式(SUM(金額))を設定し、金額列の集計をとっております。

    列1:商品

    列2:数量

    列3:単価

    列4:金額

    列5:合計 → (非表示)

    最終列は、非表示にし、DataGridViewのCellValueChangedイベントで、同じFormに配置した、TextBoxへ集計値を表示するという事を目指しております。

    集計は正しく実行されておりますが、、、CellValueChangedイベント内で、集計された合計列の値を取得しても、前回に集計されて表示されていた値(変更前の値)しか取得できません。

     

     

    Private Sub ctlDataGridView_CellValueChanged(・・省略・・・) Handles ctlDataGridView.CellValueChanged

     

     

    If e.ColumnIndex = ctlDataGridView.Columns("単価").Index Or _

         e.ColumnIndex = ctlDataGridView.Columns("数量").Index Then

            TextBox1.Text = CType(ctlDataGridView.CurrentRow.Cells("合計").Value, String)

    end if

     

    end sub

     

    [単価]と[数量]の値が変更されて発生しているイベントの最中に、[合計]の値を参照しても、まだ変更前の値だって事なんでしょうか・・?

    でも、[合計]のCellValueChangedイベントは通知されませんし・・

    このような、金額等がユーザーの入力によって変更された場合に、集計を行い、結果を別のコントロールに表示させるケースは、みなさまどのようにしておりますでしょうか、、?

    初歩的な質問で申し訳ございません、、何卒、よろしくお願いします。

    2011年6月17日 14:03

回答

  • 単価もしくは数量のセルが変更された直後にCellValueChangedが発生し、その後に合計のセルに計算結果が書き込まれるという流れになっているのでしょう。
    単純に、CellValueChangedイベントハンドラ内で、単価のセルの値  X 数量のセルの値を計算し、それをTextBox1.Textにセットしてはいかがでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク morikun 2011年6月18日 12:27
    2011年6月18日 6:18
    モデレータ

すべての返信

  • 単価もしくは数量のセルが変更された直後にCellValueChangedが発生し、その後に合計のセルに計算結果が書き込まれるという流れになっているのでしょう。
    単純に、CellValueChangedイベントハンドラ内で、単価のセルの値  X 数量のセルの値を計算し、それをTextBox1.Textにセットしてはいかがでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク morikun 2011年6月18日 12:27
    2011年6月18日 6:18
    モデレータ
  • trapemiyaさま

    ご回答ありがとうございます。そうですか、、

    CellValueChangedイベント発生のたびに全行を参照して集計とるのがちょっと抵抗があり、

    Expressionによって、集計が行われるので、どうしても利用したくて固持してしまいました。。

    おっしゃるとおりですね。固すぎました・・・行数も大した事ないですし・・CellValueChangedイベントハンドラ内で集計します。

    ありがとうございましたm(_ _)m

    2011年6月18日 8:50