我有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.
我做错了什么?
答案 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();
答案 6 :(得分:2)
您应该使用foreach循环来获取每一行并找到要删除的特定行。以下是代码段。
foreach (DataRow row in participantAccounts.Rows)
{
if (row["sellrMembId"].ToString() == itemId)
{
participantAccounts.Rows.Remove(row);
participantAccounts.AcceptChanges();
break;
}
}