Vb.net 或其他索引不存在的集合。请注意,索引从0开始,一直到计数-1

Vb.net 或其他索引不存在的集合。请注意,索引从0开始,一直到计数-1,vb.net,visual-studio,Vb.net,Visual Studio,从您的屏幕截图中,我可以看到错误发生在这一行Dgv1.Rows(a).Cells(b).Value=dr(0)a在For循环中的定义是这样的,对于a=0到Dgv1.Rows.Count-1,因此不太可能是罪魁祸首 您可能需要检查b的值,该值从值2开始。如果您试图访问集合中的第二项,则必须将该行更改为 Dim b As Integer = 1 ' If you wanted to start from the 2nd cell. While dr.Read Dgv1.Rows(a)

从您的屏幕截图中,我可以看到错误发生在这一行
Dgv1.Rows(a).Cells(b).Value=dr(0)
a在For循环中的定义是这样的,
对于a=0到Dgv1.Rows.Count-1,因此不太可能是罪魁祸首

您可能需要检查b的值,该值从值2开始。如果您试图访问集合中的第二项,则必须将该行更改为

Dim b As Integer = 1 ' If you wanted to start from the 2nd cell.
    While dr.Read
    Dgv1.Rows(a).Cells(b).Value = dr(0)
    b = b + 1
End While
b很可能超过您拥有的单元格数量,并导致该问题

注意:我已将b的定义更改为从1开始

更新2

在再次查看您的代码之后,我看到了一些在查看导致错误的行时似乎遗漏的内容。您将b定义为,
Dim b as Integer=2'我建议将其更改为1
,并使用它访问数据集/读取器中的列。但当我看你的问题时,另一件事显露出来了。
awal()
方法中的第一个是

SELECT * FROM tb_alternatif2 ORDER BY nim
它返回一个具有未知(无论如何对我来说)行数和列数的有序集。然后,将数据读取器的第一列和第二列循环添加到我假设的数据网格视图的行中。然后,调用另一个查询

SELECT kode_kriteria, atribut FROM tb_kriteria2 ORDER BY kode_kriteria
它返回一个包含2列的有序集,您可以将其作为列添加到数据网格视图中。接下来是查询

SELECT c.nama_crips FROM tb_rel_alternatif2 r --... truncated
它返回定义b时的一列。在您正在创建的列的数量和然后用b对它们进行寻址之间的某个地方,您可能遇到了一个错误。或者超过一倍。假设第二个查询为您创建了10列,第三个查询返回了15行,那么在代码中使用
.Cells(b).Value
将很快用完要寻址的列


我不清楚您想用它做什么,但我建议您尝试再次定义查询并绑定到数据网格作为旁白:我还建议您使用参数来构造查询,因为您这样做的方式不太安全。。。SQL注入等等。

为什么在一个地方使用
dr.Read()
,在另一个地方使用
dr.Read
。红色下划线。可能DataReader尚未填充!,应该是
dr.Read()


那么我应该怎么做呢?很明显,
而dr.Read()
而不是
而dr.Read
@SurajS VB对在方法调用后加括号并不挑剔,只要没有参数传递给它。我有五列@Suraj SHi@JohanPristiawan,我刚刚在我的答案中发布了一个编辑后看到了这条评论。我提出了一些问题,这些问题可能会为您指明正确的方向,或者您可能会觉得有用。我仍然无法识别代码中的所有内容,因此需要通过编辑问题或对问题进行更多评论来获取更多信息。那么我应该怎么做?您是否打算从第二个单元格开始?如果是这样,您会注意到我将答案中的代码更改为以
Dim b开头,即整数=1
。请重新格式化您的问题,您的一些代码格式不正确。另外,请用最小、完整和可验证的示例编写代码。。。
SELECT c.nama_crips FROM tb_rel_alternatif2 r --... truncated