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
但是,在输入数量后,我一直得到'对象未设置为对象的实例'。
任何人都知道为什么?我需要帮助。
谢谢。
答案 0 :(得分:1)
您收到错误消息是因为您尚未初始化tempArray
变量。它只是对数组的引用,但它没有要引用的数组。
但是,您尝试将数组放入数组中,但DataRowCollection.Add
method采用数组,而不是数组数组。
只需使用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
属性永远不会是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
答案 1 :(得分:0)
为什么使用DataGrid和数组?只需使用datagrid并在数据表上调用Rows(0).ItemArray
。