繁体   English   中英

循环遍历数据表并删除行

[英]Looping through a datatable and remove row

我已经从2个不同的服务器填充了一个Datatable。 我可以在我的长度> 0的地方进行调整,我想要做的是删除未击中的行。 以下是我所拥有的内容摘要

DataRow[] dr = payments.dtPayments.Select(myselect);

if (dr.Length > 0)
{
   for (int a = 0; a < dr.Length; a++)
   {
      if (thisOption == true)
         dr[0].Delete();
      else if (otherOption == true)
      {
         dr[0]["Date"] = myDataReader["date"].ToString().Trim();
         dr[0]["Pay"] = payTypeName(myDataReader["ccdsrc"].ToString()
                                                          .Trim());
      }
   }
}
if (dr.Length == 0)
{                        
   if (LastOption == true)
   {
     //DataRow should be removed
   }                        
}

我不确定我是否完全理解你的问题,但是当你还在循环时,你似乎试图从集合中删除一个条目。 (这会导致数组索引错误)

您应该在新集合中保存对要删除的每个条目的引用,然后从旧集合中删除所有新条目:

DataRow[] dr = payments.dtPayments.Select(myselect);
List<DataRow> rowsToRemove = new List<DataRow>();

for (int a = 0; a < dr.Length; a++) {
    if(/* You want to delete this row */) {
        rowsToRemove.Add(dr[a]);
    }
}

foreach(var dr in rowsToRemove) {
    payments.dtPayments.Rows.Remove(dr);
}

如果dr.Length为零,那么您的选择不会返回任何行。 如果要删除与您的条件不匹配的行,那么我会将其实现为不同类型的查询。 也可能是我完全误解了你的问题。 您是否可以更新您的问题以显示您的SQL并指出代码示例中您遇到问题的位置:在循环内或循环之后您有注释?

您需要在循环外创建一个数据行,然后当您到达要删除的行时,将其分配给您在外部创建的行。 并打破循环。 然后在循环下面你可以删除它。

DataRow r = null;
foreach(DataRow row in table.Rows)
{
   if(condition==true)
   {
      r = row;
      break;
   }
}

table.Rows.Remove(r);

你试过这个吗?

payments.dtPayments.Rows.Remove(DR)

您可以反向循环遍历集合(对于(int i = rows.length-1; x> -1; x--))以删除多行,以确保您不会获得索引超出绑定的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM