Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 2D数组将索引抛出绑定异常_Vb.net_Asp.net Mvc 4 - Fatal编程技术网

Vb.net 2D数组将索引抛出绑定异常

Vb.net 2D数组将索引抛出绑定异常,vb.net,asp.net-mvc-4,Vb.net,Asp.net Mvc 4,我正在做一个程序,不断得到错误索引超出了数组的界限,我不知道为什么。我尝试了设置2D阵列的所有不同版本。 这是我现在如何设置的 Dim dataArray(,) As Array = New Array(,) {{}} 这是我的循环 Dim x As Integer Dim DT As DataTable Dim TA As New DSOldOrdersTableAdapters.TA DT = getOldOrders() For x = 0 To

我正在做一个程序,不断得到错误
索引超出了数组的界限,我不知道为什么。我尝试了设置2D阵列的所有不同版本。
这是我现在如何设置的

Dim dataArray(,) As Array = New Array(,) {{}}
这是我的循环

    Dim x As Integer
    Dim DT As DataTable
    Dim TA As New DSOldOrdersTableAdapters.TA
    DT = getOldOrders()
    For x = 0 To DT.Rows.Count - 1
        dataArray(0, x) = DT.Rows(x).Item("SO")
        dataArray(1, x) = (DT.Rows(x).Item("Customer"))
        dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
    Next

您正在声明一个长度为0的数组。这意味着它将无法保存任何数据。所有索引都将超出范围。阵列不会随着项目的添加而自动增长。因此,阵列通常只应在阵列大小固定(不变)的情况下使用。例如:

Dim dataArray(2,2)As Object'创建一个3x3对象数组
如果希望它随着项目的添加而自动增长,则通常需要使用
List(Of T)
而不是数组。例如:

公共类MyItem
作为客体的公共财产
以公共财产客户为对象
作为客体的公共财产
末级
' ...
Dim数据列表作为新列表(MyItem)()
' ...
将项目设置为新的MyItem()
item.SO=DT.行(x).item(“SO”)
项目.客户=DT.行(x).项目(“客户”)
item.Shippy=DT.行(x).项目(“Shippy”)
dataList.Add(项目)
' ...
Label1.Text=dataList(1).SO
或者,如果您坚持使用数组存储每个项目,您可以创建一个1D数组列表,如下所示:

Dim dataArray(,) As Array = New Array(3, DT.Rows.Count) {{}}
Dim dataArray(,) As Array = New Array(,) {{}}
Redim dataArray(3, DT.Rows.Count)
Dim x As Integer
Dim DT As DataTable
Dim TA As New DSOldOrdersTableAdapters.TA
DT = getOldOrders()
For x = 0 To DT.Rows.Count - 1
    dataArray(0, x) = DT.Rows(x).Item("SO")
    dataArray(1, x) = (DT.Rows(x).Item("Customer"))
    dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
Next
Dim dataList作为新列表(对象()的)()
' ...
数据列表。添加(
{
DT.第(x)行项目(“SO”),
DT.第(x)行项目(“客户”),
DT.第(x)行项目(“船舶”)
})
' ...
Label1.Text=数据列表(1)(0)

您正在声明一个长度为0的数组。这意味着它将无法保存任何数据。所有索引都将超出范围。阵列不会随着项目的添加而自动增长。因此,阵列通常只应在阵列大小固定(不变)的情况下使用。例如:

Dim dataArray(2,2)As Object'创建一个3x3对象数组
如果希望它随着项目的添加而自动增长,则通常需要使用
List(Of T)
而不是数组。例如:

公共类MyItem
作为客体的公共财产
以公共财产客户为对象
作为客体的公共财产
末级
' ...
Dim数据列表作为新列表(MyItem)()
' ...
将项目设置为新的MyItem()
item.SO=DT.行(x).item(“SO”)
项目.客户=DT.行(x).项目(“客户”)
item.Shippy=DT.行(x).项目(“Shippy”)
dataList.Add(项目)
' ...
Label1.Text=dataList(1).SO
或者,如果您坚持使用数组存储每个项目,您可以创建一个1D数组列表,如下所示:

Dim dataArray(,) As Array = New Array(3, DT.Rows.Count) {{}}
Dim dataArray(,) As Array = New Array(,) {{}}
Redim dataArray(3, DT.Rows.Count)
Dim x As Integer
Dim DT As DataTable
Dim TA As New DSOldOrdersTableAdapters.TA
DT = getOldOrders()
For x = 0 To DT.Rows.Count - 1
    dataArray(0, x) = DT.Rows(x).Item("SO")
    dataArray(1, x) = (DT.Rows(x).Item("Customer"))
    dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
Next
Dim dataList作为新列表(对象()的)()
' ...
数据列表。添加(
{
DT.第(x)行项目(“SO”),
DT.第(x)行项目(“客户”),
DT.第(x)行项目(“船舶”)
})
' ...
Label1.Text=数据列表(1)(0)
正如@Steven Doggart所说的(并用答案将我的时间缩短了一分钟),您正在声明一个数组,但您没有给出维度长度。您有两个选择:

  • 在声明处指定数组维度大小
  • 或用于设置数组的(维度)大小
在您的情况下,一个解决方案可能如下所示:

Dim dataArray(,) As Array = New Array(3, DT.Rows.Count) {{}}
Dim dataArray(,) As Array = New Array(,) {{}}
Redim dataArray(3, DT.Rows.Count)
Dim x As Integer
Dim DT As DataTable
Dim TA As New DSOldOrdersTableAdapters.TA
DT = getOldOrders()
For x = 0 To DT.Rows.Count - 1
    dataArray(0, x) = DT.Rows(x).Item("SO")
    dataArray(1, x) = (DT.Rows(x).Item("Customer"))
    dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
Next
或者像这样:

Dim dataArray(,) As Array = New Array(3, DT.Rows.Count) {{}}
Dim dataArray(,) As Array = New Array(,) {{}}
Redim dataArray(3, DT.Rows.Count)
Dim x As Integer
Dim DT As DataTable
Dim TA As New DSOldOrdersTableAdapters.TA
DT = getOldOrders()
For x = 0 To DT.Rows.Count - 1
    dataArray(0, x) = DT.Rows(x).Item("SO")
    dataArray(1, x) = (DT.Rows(x).Item("Customer"))
    dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
Next
看看这个。

正如@Steven Doggart所说(并用答案把我打了一分钟),您正在声明一个数组,但没有给出维度长度。您有两个选择:

  • 在声明处指定数组维度大小
  • 或用于设置数组的(维度)大小
在您的情况下,一个解决方案可能如下所示:

Dim dataArray(,) As Array = New Array(3, DT.Rows.Count) {{}}
Dim dataArray(,) As Array = New Array(,) {{}}
Redim dataArray(3, DT.Rows.Count)
Dim x As Integer
Dim DT As DataTable
Dim TA As New DSOldOrdersTableAdapters.TA
DT = getOldOrders()
For x = 0 To DT.Rows.Count - 1
    dataArray(0, x) = DT.Rows(x).Item("SO")
    dataArray(1, x) = (DT.Rows(x).Item("Customer"))
    dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
Next
或者像这样:

Dim dataArray(,) As Array = New Array(3, DT.Rows.Count) {{}}
Dim dataArray(,) As Array = New Array(,) {{}}
Redim dataArray(3, DT.Rows.Count)
Dim x As Integer
Dim DT As DataTable
Dim TA As New DSOldOrdersTableAdapters.TA
DT = getOldOrders()
For x = 0 To DT.Rows.Count - 1
    dataArray(0, x) = DT.Rows(x).Item("SO")
    dataArray(1, x) = (DT.Rows(x).Item("Customer"))
    dataArray(2, x) = (DT.Rows(x).Item("ShipBy"))
Next
看看这个。

Dim dataArray(,)As Array=New Array(,){{}

这将创建一个二维数组
数组
,即每个元素都是
数组
的二维数组。然后将其初始化为一个数组,其中包含一个空
数组
元素。我想这不是你想要的

由于您从未
ReDim
在代码中的任何位置更改数组的维数,因此它仍然是一个二维数组,其第一个维数为长度1,第二个维数为长度0

当你试着跑的时候

dataArray(0,x)=DT.行(x).项(“SO”)

数组的第二个维度的长度为零,因此它不能保存值。因此,您会得到一个“索引超出范围”异常。如果没有发生这种情况,您可能会得到另一个异常,因为
DT.Rows(x).Item(“SO”)
可能不是
数组

将数据留在DataTable中,并在需要时从中读取数据可能会更容易。否则,我认为你的意图是:

Dim dataArray(0 To 3, -1) As Object  'Temporarily create a 2D Object array

'...load the DataTable

ReDim dataArray(0 to 3, 0 To DT.Rows.Count - 1)  'Redimension the array to the proper size.

'...rest of code
Dim dataArray(,)As Array=新数组(,){{{}

这将创建一个二维数组
数组
,即每个元素都是
数组
的二维数组。然后将其初始化为一个数组,其中包含一个空
数组
元素。我想这不是你想要的

由于您从未
ReDim
在代码中的任何位置更改数组的维数,因此它仍然是一个二维数组,其第一个维数为长度1,第二个维数为长度0

当你试着跑的时候

dataArray(0,x)=DT.行(x).项(“SO”)

数组的第二个维度的长度为零,因此它不能保存值。因此,您会得到一个“索引超出范围”异常。如果没有发生这种情况,您可能会得到另一个异常,因为
DT.Rows(x).Item(“SO”)
可能不是
数组

将数据留在DataTable中,并在需要时从中读取数据可能会更容易。否则,我认为你的意图是:

Dim dataArray(0 To 3, -1) As Object  'Temporarily create a 2D Object array

'...load the DataTable

ReDim dataArray(0 to 3, 0 To DT.Rows.Count - 1)  'Redimension the array to the proper size.

'...rest of code

是否有理由需要将行从完美的DataTable容器移动到数组中?因为我正在通过标签6移动数据