2010-04-27 4 views
1

Я пытающиеся удалить строки на моей странице asp.net, используя следующий код:Удаление строк в asp.net

try 
    { 
     Table t = (Table)Page.FindControl("Panel1").FindControl("tbl"); 
     foreach (TableRow tr in t.Rows) 
     { 
      t.Rows.Remove(tr); 
     } 
    } 
    catch (Exception e) 
    { 
     lblErrorMessage.Text = "Error - RemoveDynControls - " + e.Message; 
    } 

однако, я получаю сообщение об ошибке на (когда код петли во второй раз около) «Коллекция была изменена, операция перечисления не может выполняться».

Любые идеи относительно того, что вызывает сообщение об ошибке?

ответ

5

Если вы хотите, чтобы удалить все строки, которые вы можете

t.Rows.Clear();

Если вам нужно удалить некоторые строки, идти в обратном направлении через коллекцию

for(int i=t.Rows.Count-1;i>0;i--) 
+1

Я нахожу это чище: for (int i = t.Rows.Count; i -> 0;) –

0

Поскольку foreach использует перечислитель в сгенерированном коде, вы не можете использовать foreach.

Когда вы удаляете строку, вы аннулируете базовую сборку, которая запускает это исключение.

Вы должны использовать цикл for. Это будет делать трюк

for(int x = 0;x < t.Rows.Count; x++) 
{ 
    t.Rows.RemoveAt(x); 
} 
+0

Это очень странная петля. 'x' всегда 0, что означает, что вы всегда удаляете первый элемент, который, вероятно, очень медленный (O (N^2), я подозреваю). –

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