PowerMan2015
PowerMan2015

Reputation: 1418

Exposing DataGridViewComboBoxEditingControl

I would like to know how to use the DataGridViewComboBoxEditingControl with vb.net

i need a routteen to run when the user select an item from the datagridviewcomboboxcolumn that i have configured. I am unsure how to attach the object to the column i create manually

I have implemented the following from examples on the internet but this only appears to trigger when the user click on the combobox within the column.

Private Sub dgvTicketDetail_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvTicketDetail.EditingControlShowing
    Dim editingComboBox As ComboBox = TryCast(e.Control, ComboBox)

    If editingComboBox IsNot Nothing Then
        AddHandler editingComboBox.SelectedValueChanged, AddressOf EditingComboBox_DropDown
    End If
End Sub

Private Sub EditingComboBox_DropDown(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Debug.WriteLine("A ComboBox in the DataGridView just dropped down.")
End Sub

any help would be appreciated as i cant seem to find much reference material for this

Thanks in advance

Upvotes: 0

Views: 1589

Answers (1)

PowerMan2015
PowerMan2015

Reputation: 1418

Just realised that i have never posted the answer to my question

Placed the following in the EditingControlShowing to capture request

Private Sub dgvTicketDetail_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvTicketDetail.EditingControlShowing
    Try
        If dgvTicketDetail.CurrentCell.ColumnIndex = 1 Then
            Dim cmbox As ComboBox = TryCast(e.Control, ComboBox)
            AddHandler cmbox.SelectionChangeCommitted, AddressOf Update_StockInfo
            strSelectedText = cmbox.SelectedText
        End If
    Catch ex As Exception

    End Try

End Sub

then this added items to the combobox cell

Private Sub Update_StockInfo(ByVal sender As System.Object, ByVal e As System.EventArgs)

    Dim cmbClickedCell = DirectCast(sender, DataGridViewComboBoxEditingControl)
    Dim cmbComboBox = DirectCast(sender, ComboBox)



    If dgvTicketDetail.CurrentRow.Index = cmbClickedCell.EditingControlRowIndex And dgvTicketDetail.CurrentCell.ColumnIndex = 1 Then
        Debug.WriteLine(cmbClickedCell.EditingControlRowIndex & cmbComboBox.SelectedValue)



        Dim dtStock As DataTable = CropTrackMod.GetWeight(cmbComboBox.SelectedValue)

        Dim dgvcc As DataGridViewComboBoxCell
        dgvcc = dgvTicketDetail.Rows(cmbClickedCell.EditingControlRowIndex).Cells(2)
        dgvcc.Items.Clear()

        For Each row As DataRow In dtStock.Rows
            dgvcc.Items.Add(row.Item("UnitName"))
        Next row

        If CropTrackMod.IsStockVATAble(cmbComboBox.SelectedValue) = True Then
            dgvTicketDetail.Rows(cmbClickedCell.EditingControlRowIndex).Cells("VATRate").Value = CropTrackMod.dblVATRate
        Else
            dgvTicketDetail.Rows(cmbClickedCell.EditingControlRowIndex).Cells("VATRate").Value = "0.00"
        End If



    End If
End Sub

It works really well for me, unfortunately the user wanted something different in the end ha. Oh well at least i learnt something

Upvotes: 1

Related Questions