C# 删除datagridview中的行
我想单击“chkCPTData”按钮删除datagridview“CPTData”的一些行。我在datagridview中有数百行数据。第一次单击该按钮时,不会删除任何行。然后我再次单击,一些行被删除。删除所有要删除的行大约需要8次。如何仅单击一次按钮即可删除行?谢谢C# 删除datagridview中的行,c#,datagridview,C#,Datagridview,我想单击“chkCPTData”按钮删除datagridview“CPTData”的一些行。我在datagridview中有数百行数据。第一次单击该按钮时,不会删除任何行。然后我再次单击,一些行被删除。删除所有要删除的行大约需要8次。如何仅单击一次按钮即可删除行?谢谢 private void chkCPTData_Click(object sender, EventArgs e) { for (int rows = 0; rows <= CPTData.R
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();
}
private void chkCPTData_单击(对象发送方,事件参数e)
{
for(int rows=0;rows(double)System.Convert.ToSingle(analysisDepth.Text))
{
CPTData.Rows.RemoveAt(行);
}
}
CPTData.Refresh();
}
在对行进行枚举时删除行将抛出索引,因此请尝试反向操作:
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);
}
}
问题是由前向回路引起的。这样,当您删除一行时,索引
rows
不再指向下一行,而是指向下一行之后的行
例如,您在rows=10
上,需要删除它,之后,rows
在循环中增加到11,但此时rows数组的偏移量11被删除前偏移量12处的行占用。实际上,每次删除后,您都会跳过支票中的一行
通常的解决方法是向后循环(从末尾开始,一直到第一行)
其他方法是实现这一点的最佳方法,但您也可以在删除时减少增量变量<代码>CPTData.Rows.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();
}