private void CalculateField(RecalculateFieldWrapper field)
        {
            var eval = new ExpressionEvaluator();

            if (!eval.ParseForTable(field.Expression, Model))
            {
                field.SetResult(RecalculateFieldResult.Failure, "Failed to parse.");
                return;
            }

            var  count         = 0;
            var  rowCount      = Model.NumRows;
            bool errorReported = false;

            for (var i = 0; i < rowCount; i++)
            {
                if (!eval.CalculateForTableRow(i, field.Index))
                {
                    if (!errorReported)
                    {
                        // report only the very first error
                        string s = "Failed to calculate expression for a row: " + i + ". " + eval.LastErrorMessage;
                        Logger.Current.Info(s);
                        errorReported = true;
                    }
                    continue;
                }

                count++;
            }

            if (count == rowCount)
            {
                field.SetResult(RecalculateFieldResult.Success, "Success");
            }
            else
            {
                field.SetResult(RecalculateFieldResult.SomeRows, string.Format("{0} from {1}", count, rowCount));
            }
        }
Ejemplo n.º 2
0
 public void UpdateField(RecalculateFieldWrapper wrapper)
 {
     recalculateFieldsGrid1.Adapter.ReReadRecord(wrapper);
     recalculateFieldsGrid1.Refresh();
 }