internal void EvaluateExpressions(DataColumn column)
{
// evaluates all rows for expression from specified column
Debug.Assert(column.Computed, "Only computed columns should be re-evaluated.");
int count = column._table.Rows.Count;
if (column.DataExpression.IsTableAggregate() && count > 0)
{
// this value is a constant across the table.
object aggCurrent = column.DataExpression.Evaluate();
for (int j = 0; j < count; j++)
{
DataRow row = column._table.Rows[j];
// only evaluate original values if different from current.
if (row._oldRecord != -1 && row._oldRecord != row._newRecord)
{
column[row._oldRecord] = aggCurrent;
}
if (row._newRecord != -1)
{
column[row._newRecord] = aggCurrent;
}
if (row._tempRecord != -1)
{
column[row._tempRecord] = aggCurrent;
}
}
}
else
{
for (int j = 0; j < count; j++)
{
DataRow row = column._table.Rows[j];
if (row._oldRecord != -1 && row._oldRecord != row._newRecord)
{
column[row._oldRecord] = column.DataExpression.Evaluate(row, DataRowVersion.Original);
}
if (row._newRecord != -1)
{
column[row._newRecord] = column.DataExpression.Evaluate(row, DataRowVersion.Current);
}
if (row._tempRecord != -1)
{
column[row._tempRecord] = column.DataExpression.Evaluate(row, DataRowVersion.Proposed);
}
}
}
column.Table.ResetInternalIndexes(column);
EvaluateDependentExpressions(column);
}