在vb.net的datagridview中索引超出范围的异常

时间:2013-11-06 11:46:08

标签: vb.net winforms datagridview

以下是我在按F9键时选择特定行列值时使用的代码。但是我得到了错误,因为参数超出范围异常被处理。详细错误来自索引超出范围异常。

Private Sub dgsearchitemlist_KeyDown(ByVal sender As Object, _
       ByVal e As System.Windows.Forms.KeyEventArgs) _
       Handles dgsearchitemlist.KeyDown

    If e.KeyCode = Keys.F9 Then
        itemcode = dgsearchitemlist.SelectedRows(0).Cells(0).Value

        description = dgsearchitemlist.SelectedRows(0).Cells(2).Value.ToString
        uom = dgsearchitemlist.SelectedRows(0).Cells(3).Value.ToString

    End If
End Sub

3 个答案:

答案 0 :(得分:2)

备选方案1:

也许dgsearchitemlist.SelectionMode未设置为 RowHeaderSelect FullRowSelect 手动选择行的所有单元格不会选择该行。请检查并将属性设置为任何这些值。

备选方案2:

如果您只需要最后选择的行,则可以使用 dgsearchitemlist.CurrentRow 而不是dgsearchitemlist.SelectedRows(0)。然后,您不必检查是否已选择任何行。

希望任何这些替代方案都会点击!

答案 1 :(得分:0)

很可能你引用了一个不存在的列索引,在这种情况下它可能是以下代码之一:

  description = dgsearchitemlist.SelectedRows(0).Cells(2).Value.ToString
  uom = dgsearchitemlist.SelectedRows(0).Cells(3).Value.ToString

即Cell(2)或Cell(3)。如果您只有两列并且索引为2表示您正在访问第3列,并且如果您有索引3则表示您正在访问第4列。并且这些列中的任何列都不存在那么它将是索引超出范围

答案 2 :(得分:0)

听起来好像在某些情况下,没有选择任何行。试试这个:

Private Sub dgsearchitemlist_KeyDown(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.KeyEventArgs) _
    Handles dgsearchitemlist.KeyDown

    If dgsearchitemlist.SelectedRows.Count = 0  Then Exit Sub

    If e.KeyCode = Keys.F9 Then
        itemcode = dgsearchitemlist.SelectedRows(0).Cells(0).Value
        ...