Vb.net 以编程方式在以编程方式创建的datagridview中添加、删除列和行

Vb.net 以编程方式在以编程方式创建的datagridview中添加、删除列和行,vb.net,winforms,datagridview,Vb.net,Winforms,Datagridview,大家好,我正在尝试创建一个动态文本编辑器,它将具有选项卡和选项,可以使用按钮添加、删除DataGridView。在DataGridView中,也可以通过编程方式添加列和行。我已到达以下代码: Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click Dim tbpg As TabPage = TabControl1.SelectedTab

大家好,我正在尝试创建一个动态文本编辑器,它将具有选项卡和选项,可以使用按钮添加、删除DataGridView。在DataGridView中,也可以通过编程方式添加列和行。我已到达以下代码:

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Dim tbpg As TabPage = TabControl1.SelectedTab
        Dim dgview As New DataGridView
        Controls.Add(dgview)
        dgview.Location = New Point(5, 5)
        dgview.Size = New Size(250, 250)
        dgview.ColumnCount = 5
        dgview.RowCount = 5
        tbpg.Controls.Add(dgview)
    End Sub

问题是最初没有datagridview,因此行
DataGridView1.Columns.Add(clm)
给出了错误。因此,我认为应该有一个
currentdatagridview
selecteddatagridview
属性。
非常感谢您的帮助。

您可以更改初始声明的范围,并将其设置为表单的私有声明

Private dgview As DataGridView
然后,当您创建它时,请参考本地私有目录

dgview = New DataGridView
最后,在创建列时,只需继续引用dgview即可

dgview.Columns.Add()
这应该能满足你的要求

完整代码示例:

Public Class Form1

    Private dgView As DataGridView

    Private Sub createDGV()

        dgView = New DataGridView
        TabControl1.SelectedTab.Controls.Add(dgView)
        dgView.Location = New Point(5, 5)
        dgView.Size = New Size(250, 250)
        dgView.ColumnCount = 5
        dgView.RowCount = 5

    End Sub

Private Sub addColumn()

    Dim thisDGV As DataGridView = findMyDGV()
    If RadioButton1.Checked = True Then
        Dim clm As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn
        clm.DataPropertyName = "Property Name"
        clm.HeaderText = "Header Name"
        clm.Name = "Column Name"
        thisDGV.Columns.Add(clm)
    ElseIf RadioButton2.Checked = True Then
        thisdgv.Rows.Add()
    End If

End Sub

Private Function findMyDGV() As DataGridView

    For Each ctrl As Control In TabControl1.SelectedTab.Controls
        If TypeOf ctrl Is DataGridView Then
            Return ctrl
        End If
    Next

End Function

    Private Sub TestDGVButton_Click(sender As System.Object, e As System.EventArgs) Handles TestButton.Click

        Try
            createDGV()
            addColumn()
        Catch ex As Exception
            MessageBox.Show(String.Concat("An error occurred: ", ex.Message))
        End Try

    End Sub

End Class

您可以更改初始声明的范围,并将其设置为窗体的私有声明

Private dgview As DataGridView
然后,当您创建它时,请参考本地私有目录

dgview = New DataGridView
最后,在创建列时,只需继续引用dgview即可

dgview.Columns.Add()
这应该能满足你的要求

完整代码示例:

Public Class Form1

    Private dgView As DataGridView

    Private Sub createDGV()

        dgView = New DataGridView
        TabControl1.SelectedTab.Controls.Add(dgView)
        dgView.Location = New Point(5, 5)
        dgView.Size = New Size(250, 250)
        dgView.ColumnCount = 5
        dgView.RowCount = 5

    End Sub

Private Sub addColumn()

    Dim thisDGV As DataGridView = findMyDGV()
    If RadioButton1.Checked = True Then
        Dim clm As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn
        clm.DataPropertyName = "Property Name"
        clm.HeaderText = "Header Name"
        clm.Name = "Column Name"
        thisDGV.Columns.Add(clm)
    ElseIf RadioButton2.Checked = True Then
        thisdgv.Rows.Add()
    End If

End Sub

Private Function findMyDGV() As DataGridView

    For Each ctrl As Control In TabControl1.SelectedTab.Controls
        If TypeOf ctrl Is DataGridView Then
            Return ctrl
        End If
    Next

End Function

    Private Sub TestDGVButton_Click(sender As System.Object, e As System.EventArgs) Handles TestButton.Click

        Try
            createDGV()
            addColumn()
        Catch ex As Exception
            MessageBox.Show(String.Concat("An error occurred: ", ex.Message))
        End Try

    End Sub

End Class

解释什么是
DataGridView1
?您是否在表单上使用了任何
DataGridView
控件?如果没有,那么它肯定会给您错误消息,您正在使用Controls.Add(dgview)将DGV添加到表单,而不是选项卡页。您也没有给它命名。请解释什么是
DataGridView1
?您是否在表单上使用了任何
DataGridView
控件?如果没有,那么它肯定会给您错误消息,您正在使用Controls.Add(dgview)将DGV添加到表单,而不是选项卡页。您也没有给出它的名称。非常感谢您的回复,如果您能详细说明,那将是非常好的。好的,谢谢Mort现在它工作了,但正如我前面所说的,将有不同的选项卡,并且DataGridView将在不同的选项卡上创建。现在,当我运行创建行和列的代码时,会在上次创建的datagridview中创建相同的行和列。行和列应该在当前选中的选项卡的datagridview中创建。非常感谢您的回复,如果您能详细说明,那将是非常好的。好的,感谢Mort现在它的工作,但正如我前面所说的,将有不同的选项卡,datagridview将在不同的选项卡上创建。现在,当我运行创建行和列的代码时,会在上次创建的datagridview中创建相同的行和列。行和列应在当前选定的选项卡的datagridview中创建。