我有下面的代码试图修改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();
}
}
答案 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 = " "+oldVal;
row[i] = newVal;
}
dtUpdated.ImportRow(row);
}
假设在上面的代码中,通过获取新的数据表将“空格”添加到所有单元格的文本中。