2012-08-12 89 views
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 

回答

0

我相信錯誤是發生在你的搜索值不會在GridView中找到,因此環將通過所有行。

但是你從0循環到GridView的行數,但該行集合中的GridView控件是從零開始的,因此,你需要通過循環接一個地減少迭代量:

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 

例如:

比方說你的GridView中有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) 
+0

我試了一下,我現在可以輸入更多的digts,但選擇的行仍然在頂部,當我使用退格時,它再次彈出。 – 2012-08-12 08:57:08

+0

好吧,'.Cells(0)'中的數據是否包含您需要搜索的數據?如果是這樣,那麼你應該能夠刪除你的代碼中的'.Substring(0,tbx_search.Text)'部分。 – XN16 2012-08-12 09:01:02

+0

對不起,但我仍然沒有得到它,如果他們什麼都沒有找到,我怎麼能回到它?我不能使用退後的空間。此代碼是搜索 – 2012-08-12 09:05:51

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

包含更好。我無法理解你的第二個問題,但試試這個。

+0

imageshack.us/photo/my-images/191/errorxp.png我只是提供一個屏幕截圖給你,我不能用言語解釋抱歉。問題仍然是搜索突出顯示不正確 – 2012-08-12 09:31:20