2012-07-04 28 views
1

我試圖訪問和使用for循環改變一個DataTable中的下一行的價值,但我得到的錯誤:訪問下一行DataTable中

System.IndexOutOfRangeException: There is no row at position 247. 

我知道,在最後的循環,它不會找到下一行。但我檢查它是否存在,然後只修改值,但它不工作。
這裏是我的代碼:

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    DataRow _row = dt.Rows[i]; 
    if (_row[1].ToString() != "" && _row[0].ToString() != "") 
    { 
    int temp = i + 1; 
    if (dt.Rows[temp].GetType() == typeof(DataRow)) 
    { 
     dt.Rows[temp][0] = _row[0].ToString(); 
    } 
    } 
} 

任何幫助,將不勝感激。 謝謝。

+4

爲什麼不直接循環到'Rows.Count - 1',那麼你不必檢查是否有下一行,因爲總會有。 – Blorgbeard

回答

4

失敗的原因是沒有行即可,所以它甚至調用GetType之前失敗:

if (dt.Rows[temp].GetType() == typeof(DataRow)) 
// ^^^^^^^^^^^^^ <-- throws an IndexOutOfRangeException here 

相反,你可以遍歷一個小於行數:

for (int i = 0; i < dt.Rows.Count - 1; i++) 
{ 
    DataRow row = dt.Rows[i]; 
    DataRow nextRow = dt.Rows[i + 1]; 
    // ... 
} 

如果你想爲最後一行做一些特殊的事情,你可以在循環之後做到這一點。

+0

謝謝你這個作品! –