C#DataTable删除行

时间:2014-12-16 12:27:58

标签: c# .net datatable

我有DataTable participantAccounts,它没有连接到任何数据库或其他东西。

如何从中删除一行?

这不起作用:

for (int i = participantAccounts.Rows.Count - 1; i >= 0; i--) {
          DataRow dr= participantAccounts.Rows[i];
          if (Equals(dr["sellrMembId"].ToString(), itemId))
            participantAccounts.Rows.RemoveAt(i);
        }

        participantAccounts.AcceptChanges();

它的行为就像一切都很好但行仍然保留在DataTable中。 我也尝试了dr.Delete(),但这都不起作用。 当我尝试participantAccounts.Rows.Remove(dr)时,我得到例外The given DataRow is not in the current DataRowCollection.

我做错了什么?

7 个答案:

答案 0 :(得分:3)

if (participantAccounts.Rows.Contains(itemId))
            {
                DataRow foundRow = participantAccounts.Rows.Find(itemId);
                participantAccounts.Rows.Remove(foundRow);

           }

答案 1 :(得分:3)

for (int i = participantAccounts.Rows.Count - 1; i >= 0; i--)
{
    DataRow dr= participantAccounts.Rows[i];
    if (Equals(dr["sellrMembId"].ToString(), itemId))
    {
        participantAccounts.Rows.Delete();
        participantAccounts.AcceptChanges();
    }
}

答案 2 :(得分:3)

最后我找到了解决方案。 IT与删除行的方式无关。

DataTable dt = participantAccounts;
        dt.Rows.Remove(dt.Rows.Find(itemId));
        participantAccounts = dt;

问题是,我认为,参与者帐户是一个视图状态(.ASP),因此它没有使用直接方法进行更新。

感谢大家的帮助

答案 3 :(得分:2)

您应该使用Delete代替RemoveAt

所以你的代码看起来像:

for (int i = participantAccounts.Rows.Count - 1; i >= 0; i--) 
{
      var dr= participantAccounts.Rows[i];
      if (object.Equals(dr["sellrMembId"], itemId))
         dr.Delete();
}

participantAccounts.AcceptChanges();

注意:您删除的DataRows将出现在DataTable中,并且只有RowStatus = Deleted才会在DataTable上调用AcceptChanges方法。调用AcceptChanges后,删除的DataRows将从表中删除。

有关DataRow.Delete方法的参考,请参阅MSDN

答案 4 :(得分:2)

int index = -1;

for (int i = participantAccounts.Rows.Count - 1; i >= 0; i--)
{
    DataRow dr= participantAccounts.Rows[i];
    if (Equals(dr["sellrMembId"].ToString(), itemId))
    {
        index = i;
        break;
    }
}

participantAccounts.Rows.RemoveAt(index);
participantAccounts.AcceptChanges();

答案 5 :(得分:2)

这应该做的工作..

dataSet1.Customers.Rows[0].Delete();

OR

dataSet1.Tables["Customers"].Rows[0].Delete();

How to: Delete Rows in a DataTable

答案 6 :(得分:2)

您应该使用foreach循环来获取每一行并找到要删除的特定行。以下是代码段。

foreach (DataRow row in participantAccounts.Rows)
{
   if (row["sellrMembId"].ToString() == itemId)
   {
      participantAccounts.Rows.Remove(row);
      participantAccounts.AcceptChanges();
      break;
   }
}