0

私は自分のシステムで検索を行っていますが、次のように述べています。

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

1桁しか入力できず、別の桁を消去または入力すると、エラーがポップアップ表示されます。

ここに私のコード:

  Try
        For row As Integer = 0 To dgv_room.Rows.Count
            If dgv_room.Rows(row).Cells(0).Value.ToString.Substring(0, tbx_search.Text.Length) = tbx_search.Text Then
                dgv_room.Rows(row).Selected = True
                Exit For
            End If
        Next
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
4

2 に答える 2

0
If dgv_room.Rows(row).Cells(0).Value.ToString.contains(tbx_search.Text) Then

含む方が良いです。2番目の質問が理解できませんでしたが、これを試してください。

于 2012-08-12T09:02:47.367 に答える
0

検索値がグリッドビューで見つからない場合にエラーが発生しているため、ループがすべての行を通過すると思います。

ただし、0 から gridview の行数までループしていますが、gridview の行コレクションは 0 から始まるため、ループの反復回数を 1 減らす必要があります。

  Try
        For Each row As DataGridViewRow In dgv_room.SelectedRows
            row.Selected = False
        Next
        For row As Integer = 0 To dgv_room.Rows.Count - 1
            If dgv_room.Rows(row).Cells(0).Value.ToString.Contains(tbx_search.Text) Then
                dgv_room.Rows(row).Selected = True
                Exit For
            End If
        Next
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

例えば:

グリッドビューに 5 つの行があるとします。検索テキストがそれらのいずれにも存在しない場合、各反復は次のようになります。

row = 0 > checks dgv_room.Rows(0)...
row = 1 > checks dgv_room.Rows(1)...
row = 2 > checks dgv_room.Rows(2)...
row = 3 > checks dgv_room.Rows(3)...
row = 4 > checks dgv_room.Rows(4)...
row = 5 > checks dgv_room.Rows(5)... (error here as a Row in the Rows collection with an idex of 5 doesn't exist)
于 2012-08-12T08:49:04.700 に答える