如何查找不同类型的datagridviewcell或datagridviewcolumn(创建运行时)

时间:2018-10-05 19:15:02

标签: vb.net datagridviewcolumn

(对不起,英语不佳)
我正在与- 窗口应用程序,VB,VS 2012,.net F / W- 4.5
我有一个DGV(datagridview)的形式。
dgv中有不同类型的列是在运行时创建的。
要首先执行下一步,我必须确定单击了哪种类型的单元格/列(例如dgv-combobox,dgv-textbox等)。
代码在这里,对我不起作用,因此我尝试使用MsgBox检查单击的dgv-cell的类型。

    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上。
请帮助我。预先感谢。

2 个答案:

答案 0 :(得分:1)

如果尚未启用Option Strict(项目严格)(项目属性>“编译”)

  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类型。 如果由于某种原因它不起作用,则应使用断点检查代码。

答案 1 :(得分:1)

代码TypeOf column_type是多余的,因为column_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