在循环中修改DataTable行不会保持更改

时间:2012-01-05 12:19:29

标签: c# .net c#-4.0 .net-4.0 datatable

我有下面的代码试图修改DataTable中的每一行,但是在修改发生的行上循环之后,当我查看rows集合时,LOCATION列是空的,即使循环刚刚填充它。有人可以帮忙吗?

        dtBoxes.Columns.Add("LOCATION");

        dtBoxes.DefaultView.Sort = "PALLETID";
        foreach (DataRow row in dtBoxes.DefaultView.ToTable().Rows)
        {
            var locationRow = dtLocations.Select("ID = " + row["ID"].ToString());
            if (locationRow != null)
            {
                row["LOCATION"] = locationRow.First()["LOCATION"].ToString();
            }
        }

3 个答案:

答案 0 :(得分:0)

我对DataViews了解不多,但我猜想ToTable()正在创建行的新实例。

尝试将循环修改为

foreach (DataRowView row in dtBoxes.DefaultView)
{
    //....
}

答案 1 :(得分:0)

dtBoxes.Columns.Add( “LOCATION”);

    dtBoxes.DefaultView.Sort = "PALLETID";
    foreach (DataRow row in dtBoxes.DefaultView.ToTable().Rows)
    {
        var locationRow = dtLocations.Select("ID = " + row["ID"].ToString());
        if (locationRow != null)
        {
            row["LOCATION"] = locationRow.First()["LOCATION"].ToString();
        }
    }


dtBoxes.UpdateChanges() // Add this line and check

答案 2 :(得分:0)

如果您正在使用DataTable,则需要使用另一个DataTable,然后您需要遍历数据表中的整个单元格,如代码所示。我们无法修改同一个表中的行,因为它会抛出异常,说“收集已修改“。我们必须采用一个新的数据表。

请考虑以下代码。

     //To get the result with leading zero's in excel this code is written.
    DataTable dtUpdated=new DataTable();
    //This gives similar schema to the new datatable
    dtUpdated = dtReports.Clone();
        foreach (DataRow row in dtReports.Rows)
        {
            for (int i = 0; i < dtReports.Columns.Count; i++)
            {
                string oldVal = row[i].ToString();
                string newVal = "&nbsp;"+oldVal;
                row[i] = newVal;
            }
            dtUpdated.ImportRow(row); 
        }

假设在上面的代码中,通过获取新的数据表将“空格”添加到所有单元格的文本中。