2013-09-24 75 views
2

我想從用戶選擇的行開始清除datagridview。我想實現它的一些方法,但他們都產生了一些錯誤,現在我有這樣的事情:從所選行開始清除datagridview

foreach(DataGridViewRow row in this.dataGridView1.Rows) 
{ 
    if(row.Index >= odelementu - 1) 
     dataGridView1.Rows.RemoveAt(row.Index); 
} 

用戶需要選擇從哪一行,我們應該明確的DataGridView,然後點擊按鈕

odelementu //this variable represents the starting row 

我不知道爲什麼循環遺漏了一些行。我將不勝感激的任何建議

回答

0

這是因爲你修改在foreach循環,並使index得到變成inexact。試試這個:

while(dataGridView1.Rows.Count>=odelementu) { 
    dataGridView1.Rows.RemoveAt(odelementu-1); 
} 
+0

它完美的作品,告訴我們,如果問題的根源是,當我們刪除行的其他人得到不同的指標? – MyWay

+0

@MyWay是的,就是這樣的。 –

+0

@MyWay如果你想使用'for-loop',你必須從最後一行循環到第一行。 –

0
public void RemoveRows() 
{ 
    var selectedrows = datagridview.SelectedRows.Cast<DataGridViewRow>(); 
    if (selectedrows.Count() == 0) 
     return; 
    var fromIndex = selectedrows.Last().Index; 
    datagridview.Rows.Cast<DataGridViewRow>() 
     .Where(p=>p.Index > fromIndex) 
     .ToList() 
     .ForEach(p=>datagridview.Rows.Remove(p)); 

} 
+0

thx努力;) – MyWay

+0

@MyWay不客氣。你測試過了嗎?它工作嗎? – Alireza