【问题标题】:Looping through a datatable and remove row循环遍历数据表并删除行
【发布时间】:2010-09-23 19:35:30
【问题描述】:

我已经从 2 个不同的服务器填充了一个数据表。我可以在我的长度> 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
   }                        
}

【问题讨论】:

    标签: c# .net asp.net sql


    【解决方案1】:

    您可以反向循环遍历集合(for (int i=rows.length-1;x>-1;x--) )以删除多行,以确保不会出现索引越界错误。

    【讨论】:

    • 我比双循环更喜欢这个。这始终是我的首选方法。
    【解决方案2】:

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

    【讨论】:

    • 你是对的。我意识到我没有返回任何行。我所做的是创建一个新数据集并用我找到的内容填充行。谢谢
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      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);
      }
      

      【讨论】:

        【解决方案5】:

        你试过了吗?

        payments.dtPayments.Rows.Remove(dr)

        【讨论】:

        • 我做到了,而且我对它进行了更多研究。我第一次有 dr[0].delete,我有你的建议(dr 和 dr[0]),错误索引超出了数组的范围是我的错误。有办法纠正吗?
        猜你喜欢
        • 2012-03-16
        • 2019-11-07
        • 1970-01-01
        • 2020-12-22
        • 2022-01-08
        • 2019-11-10
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多