2010-04-27 64 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;) – 2010-04-27 12:20:06

0

由於foreach在生成的代碼中使用枚舉數,所以不能使用foreach。

當您刪除一行時,會使觸發該異常的底層Collection無效。

您應該使用for循環。如果要清除所有行那會做的伎倆

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

倒退這是一個非常奇怪的循環。 'x'總是0,這意味着你總是刪除第一個元素,這可能非常慢(O(N^2),我懷疑)。 – 2010-04-27 12:19:28