从Form2 Visual Basic更改Form1中的数据表

时间:2013-06-04 12:51:40

标签: vb.net forms datatable

所以我的代码名为MyMenuForm

Public Class MyMenuForm

    Public Sub LoadForm(sender As Object, e As EventArgs)
        DataGrid.DataSource = DataGridTable
        DataGridTable.Columns.Add("Name", GetType(String))
        DataGridTable.Columns.Add("Verison", GetType(String))
        DataGridTable.Columns.Add("Compile", GetType(Button))
        DataGridTable.Columns.Add("Location", GetType(String))
        DataGridTable.Columns.Add("CompileLoc", GetType(String))
    End Sub

    Public DataGridTable As DataTable

End Class

我希望能够从名为DataGridTable的其他表单中修改AddForm

Public Class AddForm

    Public Sub Add_Click(sender As Object, e As EventArgs) Handles AddButton.Click
        MyMenuForm.DataGridTable.Rows.Add(NameBox(), VersionBox(), "Compile", LocationBox(), CompileBox())
    End Sub

End Class

当我点击AddButton按钮时,收到错误

Additional information: Object reference not set to an instance of an object.

有谁知道为什么会发生这种情况或我如何解决这个问题?我已经google了我的能力,并没有找到解决方案。请帮助。

4 个答案:

答案 0 :(得分:0)

尝试在项目中创建新模块,然后在那里声明数据表..

Public DataGridTable As DataTable

不要以课堂形式宣布公开..

所以你可以调用每个表单类..

Public Class AddForm

    Public Sub Add_Click(sender As Object, e As EventArgs) Handles AddButton.Click
        DataGridTable.Rows.Add(NameBox(), VersionBox(), "Compile", LocationBox(), CompileBox())
    End Sub

End Class

答案 1 :(得分:0)

LoadForm是否正确执行?您似乎还没有实例化新的DataTable。所以DataGridTable总是没有。

答案 2 :(得分:0)

你没有在任何地方实例化DataGridTable,看,你只是声明了它。 你需要一个

DataGridTable = New DataTable

在某些时候,可能在LoadForm子

答案 3 :(得分:0)

试试我为此示例创建的test project

以下是一些解释:

注意范围非常重要。 Object reference not set to an instance of an object是一个非常常见的错误,通常表明需要进行某种架构调整。

以下是 MyMenuForm 类的设置。 DataTable被声明为该类的属性,因此任何可以访问该类的人都可以访问该特定属性。

Public Class MyMenuForm

    Public DataGridTable As New DataTable

    Private Sub LoadForm(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With DataGridTable.Columns
            .Add("Name", GetType(String))
            .Add("Verison", GetType(String))
            .Add("Compile", GetType(Button))
            .Add("Location", GetType(String))
            .Add("CompileLoc", GetType(String))
        End With
        DataGridView1.DataSource = DataGridTable
    End Sub

End Class

在尝试添加MyMenuForm类的行之前,还需要确保已创建AddForm。在我的情况下,我只是将其添加为启动表单并在点击

上打开添加表单

Startup From

AddForm 中,请确保引用DataGridTable类上的MyMenuForm属性,如下所示:

Private Sub AddButton_Click(sender As System.Object, e As System.EventArgs) Handles AddButton.Click
    Dim row As DataRow = MyMenuForm.DataGridTable.NewRow()

    With row
        .Item("Name") = "TestName"
        .Item("Verison") = "TestVerison"
        .Item("Compile") = New Button
        .Item("Location") = "TestLocation"
        .Item("CompileLoc") = "TestCompileLoc"
    End With

    MyMenuForm.DataGridTable.Rows.Add(row)

End Sub