Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#数据表删除行_C#_.net_Datatable - Fatal编程技术网

C#数据表删除行

C#数据表删除行,c#,.net,datatable,C#,.net,Datatable,我有DataTableparticipantAccounts,它没有连接到任何数据库或其他东西 如何从中删除一行 这不起作用: for (int i = participantAccounts.Rows.Count - 1; i >= 0; i--) { DataRow dr= participantAccounts.Rows[i]; if (Equals(dr["sellrMembId"].ToString(), itemId))

我有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)
时,我得到一个异常
给定的数据行不在当前数据行集合中。


我做错了什么?

你应该使用
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();
注意:您删除的数据行将出现在DataTable中,并具有
RowStatus=deleted
,直到您调用DataTable上的
AcceptChanges
方法。调用
AcceptChanges
后,删除的数据行将从表中删除


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

这应该可以完成工作

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

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


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

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

最后我找到了解决办法。 这与删除行的方式无关

DataTable dt = participantAccounts;
        dt.Rows.Remove(dt.Rows.Find(itemId));
        participantAccounts = dt;
问题是,我认为participantAccounts是一个viewstate(.ASP),因此没有使用直接方法进行更新


感谢大家的帮助

Try
DataRow dr=participantAccounts.Rows[i];如果(等于(dr[“sellrMembId”].ToString(),itemId)){dr.Delete();}
,则问题在于在表上循环时从表中删除行。您应该改为使用a for each并使用
.remove([Datarow])
Michael删除行-我尝试了,但没有效果-当我使用
remove
时,我得到一个异常
给定的数据行不在当前数据行集合中。(我在循环之外使用了它)
@Maarty您是否仍然调用
participantAccounts.AcceptChanges()
foreach
循环之后?当我执行此方法时,我得到一个异常
给定的数据行不在当前数据行集合中。
participantAccounts.Rows.Contains(itemId)的值如何?它确实包含。。。foundRow与my row一起加载,但在Remove(foundRow)时存在异常能否在Remove语句之前告诉我foundRow.RowState的值?能否解释此代码的作用以及它如何解决此问题。完全不需要在循环中调用
AcceptChanges
。如果调用AcceptChanges()然后该表减少行数,以便在最后一次循环计数时没有异常。。
dataSet1.Tables["Customers"].Rows[0].Delete();
foreach (DataRow row in participantAccounts.Rows)
{
   if (row["sellrMembId"].ToString() == itemId)
   {
      participantAccounts.Rows.Remove(row);
      participantAccounts.AcceptChanges();
      break;
   }
}
DataTable dt = participantAccounts;
        dt.Rows.Remove(dt.Rows.Find(itemId));
        participantAccounts = dt;