繁体   English   中英

从数据集中的数据表中删除一行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM