DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridView内のコンボボックスの値変更が認識できない

環境/言語:[VB2008Express+Vista]
分類:[.NET]

VB2008Express+Vistaで開発しています。

DataGridView内のコンボボックスの値変更チェックで困っています。
(DataGridViewComboBoxColumn)

コンボボックスの値を変更後、フォーム内の更新ボタンを
クリックした時は、変更を認識できるのですが、、

コンボボックスの値を変更後、フォームの閉じるボタンクリックした時は、
変更を認識できない状況です。
この場合は、CellEndEditイベントが発生しないようです。


●解決したいこと
コンボボックスの値を変更→フォームの閉じるボタンクリックした時にも
変更を認識できるようにしたい



現在のコードは、以下のとおりです。


'更新ボタンをクリックした時
Private Sub btnUpdStatus_Click(ByVal sender As System.Object,()
For i = 0 To dg1.Rows.Count - 1
If dg1.Item("Status", i).Value.ToString() <> dg1.Item("cmbStatus", i).Value.ToString() Then
'この場合は変更ありと判断し、XMLファイル更新を行う

'"cmbStatus"列はコンボボックス
'"Status"列は、更新前の値(テキストボックス)
'DataGridViewにデータ表示された時は、"cmbStatus"列と"Status"列の値は同じ

End If
Next
End Sub


'フォームを閉じる時
Private Sub Form1_FormClosing(ByVal sender As Object,・・・
Dim blnUpdStatus As Boolean = False

For i = 0 To dg1.Rows.Count - 1
If dg1.Item("Status", i).Value.ToString() <> dg1.Item("cmbStatus", i).Value.ToString() Then
blnUpdStatus = True
End If
Next

'更新されていなければ、そのままフォームを閉じる
If blnUpdStatus = False Then
Exit Sub
End If

'更新処理を行うかをメッセージボックス表示




End Sub



上記コードでうまくいかないので、以下のコードを追加してみましたが、
DataGridViewの選択行が取得できずに、頓挫しています。
参考にしたURL
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridvieweditingcontrolshowingeventargs.control.aspx

Private Sub dg1_EditingControlShowing(ByVal sender As Object,・・・

Dim cmb As ComboBox = CType(e.Control, ComboBox)
If (cmb IsNot Nothing) Then

RemoveHandler cmb.SelectedIndexChanged, _
New EventHandler(AddressOf ComboBox_SelectedIndexChanged)

AddHandler cmb.SelectedIndexChanged, _
New EventHandler(AddressOf ComboBox_SelectedIndexChanged)

End If

End Sub


Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim cmb As ComboBox = CType(sender, ComboBox)

'ここで、DataGridViewの選択行が取得できれば、
'dg1.Rows(i).Tag = True
'と設定することで解決できないか?

End Sub

どうぞ、よろしくお願い致します。
FormClosingの先頭で、DataGridView.EndEditを呼んでやったらどうでしょうか?

Excelなどと一緒でフォーカスが外れても編集中のままだったような気がします
■No29385に返信(こうへいさんの記事)
おおっ!
そんないい方法がありましたか!

見事にうまくいきました。
ありがとうございます♪
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板