DataGridView内のコンボボックスの値変更が認識できない
- 題名: DataGridView内のコンボボックスの値変更が認識できない
- 著者: chika
- 日時: 2011/11/20 1:25:11
- ID: 29376
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: DataGridView内のコンボボックスの値変更が認識できない
- 著者: こうへい
- 日時: 2011/11/21 9:42:20
- ID: 29385
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: DataGridView内のコンボボックスの値変更が認識できない
- 著者: chika
- 日時: 2011/11/22 0:06:23
- ID: 29386
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.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
どうぞ、よろしくお願い致します。