C# 从所选行开始清除datagridview

C# 从所选行开始清除datagridview,c#,datagridview,C#,Datagridview,我想从用户选择的行开始清除datagridview。我正在尝试几种方法来实现它,但它们都会产生一些错误,现在我有了类似的方法: foreach(DataGridViewRow row in this.dataGridView1.Rows) { if(row.Index >= odelementu - 1) dataGridView1.Rows.RemoveAt(row.Index); } 用户需要选择从哪一行清除datagridview,然后单击按钮 odelemen

我想从用户选择的行开始清除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

我不知道为什么循环遗漏了一些行。如果您有任何建议,我将不胜感激,因为您修改了
foreach
循环中的
DataGridViewRowCollection
,并使得到的
索引变得
不精确。请尝试以下方法:

while(dataGridView1.Rows.Count>=odelementu) {
  dataGridView1.Rows.RemoveAt(odelementu-1);
}
public void remoterows()
{
var selectedrows=datagridview.selectedrows.Cast();
如果(selectedrows.Count()==0)
返回;
var fromIndex=selectedrows.Last().Index;
datagridview.Rows.Cast()
.其中(p=>p.Index>fromIndex)
托利斯先生()
.ForEach(p=>datagridview.Rows.Remove(p));
}

它工作得很好,告诉我们问题的根源是否是当我们删除行时,另一行得到不同的索引?@MyWay是的,是这样的。@MyWay如果要使用
for loop
,必须从最后一行循环到第一行。@MyWay如果它工作,您应该将答案标记为已接受,以使其
与众不同
,并帮助其他人也从中受益:)
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));

}