2014-02-07 136 views
1

我想單擊「chkCPTData」按鈕刪除datagridview「CPTData」的某些行。我在datagridview中有數百行數據。第一次點擊按鈕時,沒有行被刪除。然後我再點擊一次,一些行被刪除。我需要大約8次來刪除所有要刪除的行。我怎樣才能通過單擊一次按鈕來刪除行?謝謝!刪除datagridview中的行

private void chkCPTData_Click(object sender, EventArgs e) 
    { 


     for (int rows = 0; rows <= CPTData.Rows.Count - 2; rows++) 
     { 
      double SampleDepth =(double)System.Convert.ToSingle(CPTData.Rows[rows].Cells[0].Value); 
      if (SampleDepth > (double)System.Convert.ToSingle(analysisDepth.Text)) 
      { 
       CPTData.Rows.RemoveAt(rows); 
      } 
     } 

     CPTData.Refresh(); 


    } 
+0

其他方法來做到這一點的最好辦法,但你也可以遞減的增量當你移除時變量。 'CPTData.Rows.RemoveAt(行);行 - ;' –

回答

1

刪除行,同時通過他們列舉將甩開指數,所以儘量要在反向而不是:

for (int rows = CPTData.Rows.Count - 2; rows >=0; --rows) 
{ 
    double SampleDepth =(double)System.Convert.ToSingle(CPTData.Rows[rows].Cells[0].Value); 
    if (SampleDepth > (double)System.Convert.ToSingle(analysisDepth.Text)) 
    { 
    CPTData.Rows.RemoveAt(rows); 
    } 
} 
+0

它的工作原理。謝謝! – user3267800

1

問題是由正向循環引起的。這樣,當您刪除一行時,索引rows不會再指向下一行,而是指向下一行之後的行。

例如,您位於rows=10,您需要將其刪除,之後,rows在循環中遞增到11,但此時行數組的偏移量11被偏移的行佔據刪除前12。實際上,您在每次RemoveAt後都會在您的支票上跳過一行。

通常的辦法來解決它是循環落後(從年底開始,向第一行會)

private void chkCPTData_Click(object sender, EventArgs e) 
{ 
    for (int rows = CPTData.Rows.Count - 1; rows >=0; rows--) 
    { 
     double SampleDepth =(double)System.Convert.ToSingle(CPTData.Rows[rows].Cells[0].Value); 
     if (SampleDepth > (double)System.Convert.ToSingle(analysisDepth.Text)) 
     { 
      CPTData.Rows.RemoveAt(rows); 
     } 
    } 
    CPTData.Refresh();   

}