[英]Remove a row from a DataTable within a DataSet
我有一个里面有几个数据表的数据集。 我在ListView中显示DataTables(编写代码时我不知道数据绑定)。 无论如何,我想从数据集中的数据表中删除行。
我已经试过了:
foreach (DataRow row in dsData.Tables["Table1"].Rows)
{
//find the row that contains the username I'm after
if (item.SubItems[2].Text == row["LoginName"].ToString())
{
dsData.Tables["Table1"].Rows.Remove(row); //<- main code of interest
}
}
我也尝试过
dsData.Tables["Table1".Rows.Delete(row);
我遇到的问题是,当您删除行时,出现异常:
集合已修改; 枚举操作可能无法执行。
据我了解,这是因为当您从ListView中删除一行时,它下面的行会向上移动并引起所有这些麻烦。 代码本身可以实现预期的功能,但是在运行它时看到该异常并不好。
我打算用DataGridView重写整个类,但如果可能的话,宁愿改正那一行:)。
编辑:我什至不知道DataGridView无论如何会解决问题。
将循环更改为for循环,以便向后计数,这样您就不会收到该消息。
for(int i = dsData.Tables["TAble1"].Rows; i > 0; i--)
{
if(item.SubItems[2].Text == dsData.Tables["Table1"].Rows[i - 1]["LoginName"].ToString())
dsData.Tables["Table1"].Rows.Remove(i - 1)
}
尝试:
DataSet dsData = new DataSet();
List<DataRow> rowsToDelete = new List<DataRow>();
foreach (DataRow row in dsData.Tables["Table1"].Rows)
{
if (item.SubItems[2].Text == row["LoginName"].ToString())
{
rowsToDelete.Add(row);
}
}
foreach(DataRow row in rowsToDelete)
{
dsData.Tables["Table1"].Rows.Remove(row);
}
如果要删除内容,则需要向后for循环( 此处的原因说明 )
for (int i = dsData.Tables["Table1"].Rows.Count - 1; i >= 0; i--)
{
DataRow row = dsData.Tables["Table1"].Rows[i];
//find the row that contains the username I'm after
if (item.SubItems[2].Text == row["LoginName"].ToString())
{
dsData.Tables["Table1"].Rows.Remove(row); //<- main code of interest
}
}
通常,您无法在要对其进行迭代的循环内从集合中删除项目,而可以做的是保留要删除的所有行的列表(在循环内创建),然后在循环外删除所有这些行。
您无法从循环内部使用foreach循环修改正在迭代的集合。 改为这样做:
for (int i = 0; i < dsData.Tables["Table1"].Rows.Count; i++)
{
DataRow row = dsData.Tables["Table1"].Rows[i];
if (item.SubItems[2].Text == row["LoginName"].ToString())
{
dsData.Tables["Table1"].Rows.Remove(row); //<- main code of interest
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.