Ошибка в коде VB, который является "System.ArgumentNullException" в vb.net - PullRequest
0 голосов
/ 04 апреля 2019

Я получаю эту ошибку, когда добавляю только этот код:

table.Columns.Add("Grade", Type.GetType("System.string"))

Я пытался изменить тип данных на Char, но также бесполезно было добавить столбец "Grade", и этозначение как (A+,B,..)

Imports System.Data.DataTable

Public Class Form1
    Dim table As New DataTable("Table")
    Dim index As Integer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        table.Columns.Add("ID", Type.GetType("System.Int32"))
        table.Columns.Add("First Name", Type.GetType("System.String"))
        table.Columns.Add("Last Name", Type.GetType("System.String"))
        table.Columns.Add("Age", Type.GetType("System.Int32"))
        table.Columns.Add("Programming", Type.GetType("System.Int32"))
        table.Columns.Add("Law", Type.GetType("System.Int32"))
        table.Columns.Add("English", Type.GetType("System.Int32"))
        table.Columns.Add("GPA", Type.GetType("System.Int32"))
        table.Columns.Add("Grade", Type.GetType("System.string"))

        table.Rows.Add(1, "XXXX", "YYYYY", 21, 88, 77, 90, 89)
        table.Rows.Add(2, "SSDD", "hGSQ", 33, 70, 96, 72, 82)
        table.Rows.Add(3, "fgfgd", "jgfdd", 53)
        table.Rows.Add(4, "cvfghyghj", "sdrgtyh", 19)
        table.Rows.Add(5, "hghfd", "ghjgdf", 36)
        table.Rows.Add(6, "cvvdfgh", "juyrfdvc", 63)
        table.Rows.Add(7, "aefht", "cvfhytrff", 21)
        table.Rows.Add(8, "wghyuj", "mihgdwrh", 33)
        table.Rows.Add(9, "qsztii", "bvdhjh", 53)
        table.Rows.Add(10, "rytyufd", "esdfzr", 19)

        DataGridView1.DataSource = table
    End Sub

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        Table.rows.Add(TextBoxID.Text, TextBoxFN.Text, TextBoxLN.Text, TextBoxAGE.Text)
        DataGridView1.DataSource = table
    End Sub

    Private Sub TextBox4_TextChanged(sender As Object, e As EventArgs) Handles TextBoxAGE.TextChanged

    End Sub

    Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick, DataGridView1.CellClick
        index = e.RowIndex
        Dim selectedRow As DataGridViewRow
        selectedRow = DataGridView1.Rows(index)
        TextBoxID.Text = selectedRow.Cells(0).Value.ToString()
        TextBoxFN.Text = selectedRow.Cells(1).Value.ToString()
        TextBoxLN.Text = selectedRow.Cells(2).Value.ToString()
        TextBoxAGE.Text = selectedRow.Cells(3).Value.ToString()
        TextBoxPro.Text = selectedRow.Cells(4).Value.ToString()
        TextBoxLaw.Text = selectedRow.Cells(5).Value.ToString()
        TextBoxENGL.Text = selectedRow.Cells(6).Value.ToString()
        TextBoxGPA.Text = selectedRow.Cells(7).Value.ToString()
        TextBoxGrade.Text = selectedRow.Cells(8).Value.ToString()
    End Sub

    Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        Dim newDataRow As DataGridViewRow

        newDataRow = DataGridView1.Rows(index)

        newDataRow.Cells(0).Value = TextBoxID.Text
        newDataRow.Cells(1).Value = TextBoxFN.Text
        newDataRow.Cells(2).Value = TextBoxLN.Text
        newDataRow.Cells(3).Value = TextBoxAGE.Text
    End Sub

    Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
        DataGridView1.Rows.RemoveAt(index)
    End Sub

    Private Sub TextBoxID_TextChanged(sender As Object, e As EventArgs) Handles TextBoxID.TextChanged

    End Sub

    Private Sub TextBoxFN_TextChanged(sender As Object, e As EventArgs) Handles TextBoxFN.TextChanged

    End Sub
End Class

1 Ответ

0 голосов
/ 04 апреля 2019

На основе комментариев @ jmcilhinney:

  • Имя типа, переданное в Type.GetType (), чувствительно к регистру.Type.GetType("System.String") будет работать правильно.
  • Избегайте использования Type.GetType (), если в этом нет необходимости.Вместо этого используйте оператор GetType (): GetType(String) вместо Type.GetType("System.String").Таким образом, компилятор может более эффективно проверять ваш код.(Компилятор обычно не проверяет правильность содержимого строки.)

Таким образом, ваш обработчик событий Form_Load может выглядеть примерно так:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    table.Columns.Add("ID", GetType(Integer))
    table.Columns.Add("First Name", GetType(String))
    table.Columns.Add("Last Name", GetType(String))
    table.Columns.Add("Age", GetType(Integer))
    table.Columns.Add("Programming", GetType(Integer))
    table.Columns.Add("Law", GetType(Integer))
    table.Columns.Add("English", GetType(Integer))
    table.Columns.Add("GPA", GetType(Integer))
    table.Columns.Add("Grade", GetType(String))





    table.Rows.Add(1, "XXXX", "YYYYY", 21, 88, 77, 90, 89)
    table.Rows.Add(2, "SSDD", "hGSQ", 33, 70, 96, 72, 82)
    table.Rows.Add(3, "fgfgd", "jgfdd", 53)
    table.Rows.Add(4, "cvfghyghj", "sdrgtyh", 19)
    table.Rows.Add(5, "hghfd", "ghjgdf", 36)
    table.Rows.Add(6, "cvvdfgh", "juyrfdvc", 63)
    table.Rows.Add(7, "aefht", "cvfhytrff", 21)
    table.Rows.Add(8, "wghyuj", "mihgdwrh", 33)
    table.Rows.Add(9, "qsztii", "bvdhjh", 53)
    table.Rows.Add(10, "rytyufd", "esdfzr", 19)


    DataGridView1.DataSource = table


End Sub

(Исходя из предоставленного вами кода, яне знаю, где объявлена ​​ваша table переменная, но я предполагаю, что все будет правильно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...