Get selected index of `DataGridViewComboBox`

前端 未结 1 794
执念已碎
执念已碎 2021-01-25 10:44

When you add a ComboBoxColumn in DataGridView, I do not know how to handle the change event of ComboBox.

\'Adding To DGV d         


        
相关标签:
1条回答
  • 2021-01-25 11:26

    I strongly recommend you to use Cell events, such as CellValidating, CellValueChanged, ... to detect changes. The combobox that you are trying to handle its SelectedIndexChange event, is a unique instance for all cells.

    Anyway, if you want to know how to handle SelectedIndexChange event of it,you can do it this way:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim c = New DataGridViewComboBoxColumn()
        c.HeaderText = "Fruit"
        c.Name = "c"
        c.MaxDropDownItems = 4
        c.Width = 100
        c.Items.Add("apple")
        c.Items.Add("pear")
        c.Items.Add("cherries")
        c.Items.Add("plums")
        Me.DataGridView1.Columns.Add(c)
    
        For index = 1 To 5
            Me.DataGridView1.Rows.Add()
        Next
    End Sub
    
    Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
        If (TypeOf (e.Control) Is ComboBox) Then
            Dim combo = CType(e.Control, ComboBox)
            RemoveHandler combo.SelectedIndexChanged, AddressOf c_SelectedIndexChanged
            AddHandler combo.SelectedIndexChanged, AddressOf c_SelectedIndexChanged
        End If
    End Sub
    
    Private Sub c_SelectedIndexChanged(sender As Object, e As EventArgs)
        If (Me.DataGridView1.Columns(Me.DataGridView1.CurrentCell.ColumnIndex).Name = "c") Then
            Dim combo = CType(sender, ComboBox)
            'Do something with combo
        End If
    End Sub
    
    0 讨论(0)
提交回复
热议问题