DataGridViewでのKeypressイベントのセル計算について
投稿者 えふ  (社会人)
投稿日時
2009/9/24 19:53:58
下記イベントにて編集後に計算できましたが これでも大丈夫でしょうか?
Private Sub DataGridView01_CellEndEdit( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView01.CellEndEdit
Dim wk_suryo As Decimal = 0
Dim Wk_tanka As Decimal = 0
Select Case DataGridView01.Columns(Active_Col).Name
Case "数量"
If Trim(DataGridView01(Active_Col, Active_Row).Value) = "" Then
wk_suryo = 0
Else
wk_suryo = DataGridView01(Active_Col, Active_Row).Value
End If
If Trim(DataGridView01(Active_Col + 2, Active_Row).Value) = "" Then
Wk_tanka = 0
Else
Wk_tanka = DataGridView01(Active_Col + 2, Active_Row).Value
End If
DataGridView01(Active_Col + 3, Active_Row).Value = wk_suryo * Wk_tanka
Case Else
End Select
End Sub
Private Sub DataGridView01_CellEndEdit( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView01.CellEndEdit
Dim wk_suryo As Decimal = 0
Dim Wk_tanka As Decimal = 0
Select Case DataGridView01.Columns(Active_Col).Name
Case "数量"
If Trim(DataGridView01(Active_Col, Active_Row).Value) = "" Then
wk_suryo = 0
Else
wk_suryo = DataGridView01(Active_Col, Active_Row).Value
End If
If Trim(DataGridView01(Active_Col + 2, Active_Row).Value) = "" Then
Wk_tanka = 0
Else
Wk_tanka = DataGridView01(Active_Col + 2, Active_Row).Value
End If
DataGridView01(Active_Col + 3, Active_Row).Value = wk_suryo * Wk_tanka
Case Else
End Select
End Sub
Form上でデータとの連結をさせずにひとまず画面上だけで操作を考えているところです。
DataGridviewにてセルのKeypressイベントにて入力中の数量を単価と掛けて金額に自動表示させたいの
ですかKeypressイベントにて取得する数量が前回に入力したものとなってしまいます。現在入力中のものを
取得するにはどうすればよいのでしょうか?教えて下さい。
現状では下記のようにしております。
下記にてKeyPressイベントの「数量の取得」の「DataGridView01(3, Active_Row).Value」で現在入力中
でなく前回の入力を取得してしまします。通常ならばEnterキーにて計算させるのですがEnterキーにして
も同じ現象となります。
DataGridviewにてDataGridview01に左側より 商品コード、商品名、数量、単位、単価、金額の列を作成します。data
'[From loadにて]
'初期列数の設定
DataGridView01.ColumnCount = 6
DataGridView01.Columns(0).Name = "商品コード"
DataGridView01.Columns(1).Name = "商品名"
DataGridView01.Columns(2).Name = "単位"
DataGridView01.Columns(3).Name = "数量"
DataGridView01.Columns(4).Name = "単価"
DataGridView01.Columns(5).Name = "金額"
'[CellBeginEditイベントハンドラ]
Private Sub DataGridView01_CellBeginEdit(ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs) _
Handles DataGridView01.CellBeginEdit
Dim dgv As DataGridView = CType(sender, DataGridView)
'単価列・金額列を編集不可とする。
Select Case dgv.Columns(e.ColumnIndex).Name
Case "単価"
e.Cancel = True
Case "金額"
e.Cancel = True
End Select
End Sub
'[EditingControlShowingイベントハンドラ]
Private Sub DataGridView01_EditingControlShowing(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView01.EditingControlShowing
'-----もしDataGridViewTextBoxEditingControlであれば・・・
If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
Dim dgv As DataGridView = CType(sender, DataGridView)
'----1) 編集のために表示されているテキストボックスコントロールを取得します。
Dim tb As DataGridViewTextBoxEditingControl = _
CType(e.Control, DataGridViewTextBoxEditingControl)
'----2) 同じイベントハンドラが同じテキストボックスのイベントに何回も追加され
' ないようにEditingControlShowingイベントハンドラでイベントハンドラを
' 削除します。
RemoveHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress
'---3) キーイベントを発生(数量列、単価列)
Select Case dgv.CurrentCell.OwningColumn.Name
Case "数量"
AddHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress
End Select
End If
End Sub
'[KeyPressイベントハンドラ]
Private Sub dataGridViewTextBox_KeyPress(ByVal sender As Object, _
ByVal e As KeyPressEventArgs) Handles DataGridView01.KeyPress
Dim wk_suryo As Decimal = 0
Dim Wk_tanka As Decimal = 0
If e.KeyChar < "0"c Or e.KeyChar > "9"c Then
e.Handled = True '--数字しか入力できないようにする
End If
'現在のセル位置(列、行)の取得
Active_Row = DataGridView01.CurrentCell.RowIndex
Select Case DataGridView01.Columns(Active_Col).Name
Case "数量"
'数量の取得
If Trim(DataGridView01(3, Active_Row).Value) = "" Then
wk_suryo = 0
Else
wk_suryo = DataGridView01(3, Active_Row).Value
End If
'単価の取得
If Trim(DataGridView01(5, Active_Row).Value) = "" Then
Wk_tanka = 0
Else
Wk_tanka = DataGridView01(5, Active_Row).Value
End If
'金額列の計算
DataGridView01(6, Active_Row).Value = wk_suryo * Wk_tanka
Case Else
End Select
End Sub
すいませんがよろしくお願いします。