我有这样的代码:
DataTable dt = new DataTable();
// (...) getting data, displaying on DataGridView - all works fine
int columns = dt.Columns.Count; // getting column count
foreach (DataRow row in dt.Rows)
{
for (int c = 0; c < columns; c++) // c is column index
{
// all old values are positive for debugging
double oldVal = Convert.ToDouble(row.ItemArray[c]);
// new values should become negative
double newVal = oldVal * -1;
row.ItemArray[c] = newVal; // im trying to update value like this
// THIS SHOWS POSITIVE NUMBERS (NOT UPDATED)
this.Text = row.ItemArray[c].ToString(); // this is simple debug
}
}
这有点复杂,我简化了代码。
为什么我的值不会更新?
稍后添加:
还有一件重要的事情。此数据来自数据库视图,而不是表。当然,我想在我的DataTable对象中更改该数据,而不是在数据库中。
答案 0 :(得分:3)
最后这样做
dt.AcceptChanges();
这将提交自上次调用AcceptChanges()
以来对此表所做的所有更改。
DataTable dt = new DataTable();
// (...) getting data, displaying on DataGridView - all works fine
int columns = dt.Columns.Count; // getting column count
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn c in dt.Columns)
{
// all old values are positive for debugging
double oldVal = Convert.ToDouble(row[c]);
// new values should become negative
double newVal = oldVal * -1;
row[c] = newVal; // im trying to update value like this
// THIS SHOWS POSITIVE NUMBERS (NOT UPDATED)
this.Text = row[c].ToString(); // this is simple debug
}
}
dt.AcceptChanges();
编辑(补充解释):
不跟踪对ItemArray元素的更改,因此数据表值
中不会反映任何更改但是,您可以使用ItemArray一次更改所有行,如下所示:
dt.Rows[0].ItemArray = new object[] {"new value"};
在这种情况下,跟踪更改,并反映在数据表中。
答案 1 :(得分:1)
将您的foreach
循环更新为
foreach (DataRow row in dt.Rows)
{
for (int c = 0; c < columns; c++) // c is column index
{
double oldVal = Convert.ToDouble(row[c]);
double newVal = -oldVal;
row[c] = newVal;
this.Text = row[c].ToString();
}
}
或者您可以使用foreach
代替for
循环:
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn c in dt.Columns)
{
double oldVal = Convert.ToDouble(row[c]);
double newVal = -oldVal;
row[c] = newVal;
this.Text = row[c].ToString();
}
}