0
Module globalVariable

    Public tblScItem As New DataTable
    Public tempArray()
    Public index As Integer
    Public stringArr() As String

End Module

Private Sub txtQty_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtQty.TextChanged

    stringArr = New String() {"", txtItem.Text, Form2.cbGondola.SelectedItem, txtQty.Text, DateTime.Now, Form1.txtLoginId.Text}

    If txtItem.Text <> Nothing And txtQty.Text <> Nothing Then

        index = 0

        tempArray(index) = stringArr

        tblScItem.Rows.Add(tempArray)

        index += 1

    End If

End Sub

我的程序是一个盘点程序,它的工作方式是,当输入项目的数量时,它将显示在数据网格中,同时存储在数组中。整个事务完成后,整个数组被导出到一个txt文件。

我已经声明了一个数组stringArr来存储项目的所有详细信息。然后,我使用 tempArray 来存储每个项目(其中stringArr包含tempArray.

Example: 
tempArray(0) = 'details of item 1 obtained from stringArr
tempArray(1) = 'details of item 2 obtained from stringArr
and so on

但是,在输入数量后,我不断收到“对象未设置为对象的实例”。

有谁知道为什么?我需要帮助。

谢谢你。

4

2 回答 2

1

您收到错误消息是因为您尚未初始化tempArray变量。它只是对数组的引用,但它没有要引用的数组。

但是,您试图将数组放入数组中,但该DataRowCollection.Add方法需要一个数组,而不是数组数组。

只需使用stringArr变量:

Private Sub txtQty_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtQty.TextChanged

  stringArr = New String() {"", txtItem.Text, Form2.cbGondola.SelectedItem, txtQty.Text, DateTime.Now, Form1.txtLoginId.Text}

  If txtItem.Text <> "" And txtQty.Text <> "" Then

    tblScItem.Rows.Add(stringArr)

  End If

End Sub

请注意,Text控件的属性是 never Empty,您应该检查它是否为空字符串。

如果要将行添加到 以外的集合中DataTable,则不会使用数组,因为它不可调整大小。你会使用一个List(Of String())

Public tempList As new List(Of String())

Private Sub txtQty_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtQty.TextChanged

  stringArr = New String() {"", txtItem.Text, Form2.cbGondola.SelectedItem, txtQty.Text, DateTime.Now, Form1.txtLoginId.Text}

  If txtItem.Text <> "" And txtQty.Text <> "" Then

    tempList.Add(stringArr)

    tblScItem.Rows.Add(stringArr)

  End If

End Sub
于 2012-10-09T08:22:41.640 回答
0

为什么要使用 DataGrid 和数组?只需使用数据网格并调用数据Rows(0).ItemArray表。

于 2012-10-09T08:19:42.943 回答