как найти другой тип datagridviewcell или datagridviewcolumn (созданная среда выполнения)

(извините за слабость на английском)
Я работаю с окном, VB, VS 2012, .net F / W-4.5
У меня есть DGV (datagridview) в форме.
Существуют разные типы столбцов в dgv, которые создаются во время выполнения.
Чтобы выполнить следующий шаг процесса, прежде всего, я должен определить, какой тип ячейки / столбца щелкнут (например, dgv-combobox, dgv-textbox и т. Д.).
Код здесь, который не работает для меня, поэтому я попытался проверить тип щелчка dgv-cell с помощью MsgBox.

    Private Sub dgv_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgv.EditingControlShowing
            Dim column_type As Object
            column_type = dgv.Columns(dgv.SelectedCells(0).ColumnIndex).CellType
            column_type.GetType()

            If TypeOf column_type Is DataGridViewComboBoxCell Then
'code goes here       
                MsgBox("yes")            
            Else
'code goes here
                MsgBox(column_type.ToString)
            End If
            End Sub

Но проблема в том, что управление переходит в другую часть if...else statement все время, а MsgBox(column_type.ToString) отображается для всех типов столбцов, которые являются System.Windows.Forms.DataGridViewTextBoxCell или System.Windows .Forms.DataGridViewComboBoxCell.
Я попытался проверить тип столбца, используя
DataGridViewComboBoxCell,
DataGridViewComboBoxColumn,
DataGridViewComboBoxEditingControl - но ничего не работает.
Я не уверен, но я думаю, проблема Dim column_type As Object с Dim column_type As Object .
Пожалуйста, помогите мне, ребята. Заранее спасибо.

Всего 2 ответа


Код TypeOf column_type является избыточным, потому что type_type фактически является типом! Когда вы назначаете его объекту, это неправильно. Вы можете просто назначить его как Тип. Но еще проще позволить компилятору сделать задумку для вас и использовать неявный набор текста

Private Sub dgv_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgv.EditingControlShowing
    ' cursor on Dim, it is Type
    Dim column_type = dgv.Columns(dgv.SelectedCells(0).ColumnIndex).CellType
    ' the proper syntax is Type is GetType(Type)
    If column_type Is GetType(System.Windows.Forms.DataGridViewComboBoxCell) Then
        MsgBox("yes")
    Else
        MsgBox(column_type.ToString)
    End If
End Sub

Синтаксис: If Type is GetType(Type) Then

См. Https://stackoverflow.com/a/6580236/832052


Включите параметр Strict on, если вы еще этого не сделали (свойства проекта> Compile)

  If TypeOf DataGridView1.Columns(0) Is DataGridViewTextBoxColumn Then
        MsgBox("yes")
  End If

Прекрасно работает для меня.

Альтернатива:

If DataGridView1.Columns(0).GetType Is GetType(DataGridViewTextBoxColumn) Then
        MsgBox("yes")
End If

В настоящее время вы сравниваете тип typeof с типом. Если по какой-то причине это не работает, вы должны проверить код с точкой останова.


Есть идеи?

10000