2012-07-04 4 views
1

Я пытаюсь получить доступ и изменить значение следующей строки в 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

Спасибо, что это работает !!! –

Смежные вопросы