■■■

2016年4月2日土曜日

DataGridViewのSelectedIndexChangedイベントを取得する方法

DataGridViewのSelectedIndexChangedイベントを取得する方法
VB.NET
Private dgvCmb As DataGridViewComboBoxEditingControl = Nothing

Private Sub dgv1_EditingControlShowing(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles dgv1.EditingControlShowing
If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
Dim
dgv As DataGridView = CType(sender, DataGridView)

If dgv.CurrentCell.OwningColumn.Name = "ComboBox" Then
Me.dgvCmb = _
CType(e.Control, DataGridViewComboBoxEditingControl)
AddHandler Me.dgvCmbBox.SelectedIndexChanged, _
AddressOf dgvCmbBox_SelectedIndexChanged
End If
End If
End Sub


Private Sub dgv1_CellEndEdit(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles dgv1.CellEndEdit
If Not (Me.dgvCmb Is Nothing) Then
RemoveHandler Me.dgvCmbBox.SelectedIndexChanged, _
AddressOf dgvCmbBox_SelectedIndexChanged
Me.dgvCmb = Nothing
End If
End Sub


Private Sub dgvCmbBox_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As EventArgs)
Dim cb As DataGridViewComboBoxEditingControl = _
CType(sender, DataGridViewComboBoxEditingControl)
Console.WriteLine(cb.SelectedItem)
End Sub
C#
private DataGridViewComboBoxEditingControl dgvCmb = null;

private void dgv1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewComboBoxEditingControl)
{
DataGridView dgv = (DataGridView)sender;

if (dgv.CurrentCell.OwningColumn.Name == "ComboBox")
{
this.dgvCmb =
(DataGridViewComboBoxEditingControl)e.Control;
this.dgvCmbBox.SelectedIndexChanged +=
new EventHandler(dgvCmbBox_SelectedIndexChanged);
}
}
}

private void dgv1_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
if (this.dgvCmb != null)
{
this.dgvCmbBox.SelectedIndexChanged -=
new EventHandler(dgvCmbBox_SelectedIndexChanged);
this.dgvCmb = null;
}
}

private void dgvCmbBox_SelectedIndexChanged(object sender,
EventArgs e)
{
DataGridViewComboBoxEditingControl cb =
(DataGridViewComboBoxEditingControl)sender;
Console.WriteLine(cb.SelectedItem);
}

■■■