【问题标题】:Remove row from DataTable that contains value从包含值的 DataTable 中删除行
【发布时间】:2014-06-06 08:53:36
【问题描述】:

我想删除 CtryCode 列等于“MM”的行。上面这个逻辑是不是不行?

if (dataTableCopy.Rows[index]["CtryCode"].ToString().Trim().ToUpper().Contains("MM"))
{
    response.DataTable.Rows.RemoveAt(index + offset--);
}

断点没有命中上面的响应语句,执行后我可以看到 MM 行,奇怪吗?请帮忙。

【问题讨论】:

  • 什么是'offset'参数,你从哪里得到的?您是否尝试删除偏移参数?
  • 您应该绝不缩写您的代码。 CtryCode。我们不知道这是否拼写正确。应该是CountryCode
  • 如果它没有到达响应行,则检查的值不是您认为的值。为什么不将dataTableCopy.Rows[index]["CtryCode"].ToString() 写入对象,以便轻松检查实际值是多少?然后您将能够更容易地看到为什么它没有通过 IF 语句中设置的逻辑。
  • 临时添加一个变量来捕获dataTableCopy.Rows[index]["CtryCode"]的结果。这是什么?
  • @Dan-o 公平地说,这可能是来自外部来源的数据

标签: c# .net winforms c#-4.0 c#-3.0


【解决方案1】:

要删除包含值的行,试试这个

DataRow[] result = dt2.Select("CtryCode = 'mm'");
foreach (DataRow row in result)
{
    if (row["CtryCode"].ToString().Trim().ToUpper().Contains("MM"))
    dt2.Rows.Remove(row);
}

【讨论】:

    【解决方案2】:

    如果你知道该行的索引,你可以像这样删除该行,

    for(int i=0;i<dataTableCopy.Rows.Count-1;i++)
       {        
            if (dataTableCopy.Rows[i]["CtryCode"].ToString().Trim().ToUpper().Contains("MM"))
        {
             dataTableCopy.Rows[i].Delete();
        }
      }
    

    【讨论】:

      【解决方案3】:

      请查找代码:

      int id=98;
      DataTable dt = new DataTable();
      foreach (DataRow row in dt.Rows)
      {
          if(row["Id"].ToString().Trim().Contains(id.ToString()))
              dt.Rows.Remove(row);
      }
      

      【讨论】:

      • 如果int id = 1,这将删除Id列中包含1(1、10、11、12、13等)的所有行,因为string.Contains返回@ 987654326@ 如果string 包含与传递的参数匹配的任何子字符串。使用if(row["Id"].ToString().Trim() == id.ToString()) 而不是if(row["Id"].ToString().Trim().Contains(id.ToString()))
      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多