Accessing Validator Results |
This example shows three different ways to access validator results.
BcfDataSet.ValidationResults all error info
BcfRow.GetValidationTags() error info of row
BcfRow.GetValidationTags(BcfCell cell) error info of cell
Create a c# console application named "ConsoleApplication1" and paste the code in Program.cs. Add a reference to CalculationWorks.FreeEdition.BusinessModel library (available on NuGet).
using System; using System.Linq; using CalculationWorks.FreeEdition.BusinessModel; using CalculationWorks.FreeEdition.BusinessModel.Behaviors; using CalculationWorks.FreeEdition.BusinessModel.Design; namespace ConsoleApplication1 { public class GreaterThanValidator : BcfValidatorBase { [BcfMandatory] public int GreaterValue { get; set; } [BcfMandatory] public int LessValue { get; set; } public override BcfValidatorMessage Validate() { if (GreaterValue > LessValue) return null; return new BcfValidatorMessage("{0} is not greater then {1}", GreaterValue, LessValue); } } public class LessThan3Validator : BcfValidatorBase { [BcfMandatory] public int Value { get; set; } public override BcfValidatorMessage Validate() { if (Value < 3) return null; return new BcfValidatorMessage("{0} is not less then 3", Value); } } class Program { static void Main(string[] args) { Console.Title = "Accessing Validator Results"; var dss = CreateTestDataSetSetup(); var ds = new BcfDataSet(dss); var table1 = ds.Tables[0]; var row1 = table1.AddNewRow(); var cell1 = row1[0]; var cell2 = row1[1]; cell1.Value = 1; cell2.Value = 5; Console.WriteLine("Content of: ds.ValidationResults collection"); foreach (var validationResult in ds.ValidationResults) { Console.WriteLine("Validator: {0}, Row: {1}, CellsTagged: {2}\n Message: \"{3}\"" , validationResult.CellContent.ValidatorCell.Validator.GetType().Name , validationResult.CellContent.ValidatorCell.ValidatingRow.GetHashCode() , validationResult.GetCellsTagged().Count() , string.Format(validationResult.CellContent.Message.FormatString, validationResult.CellContent.Message.FormatParameters)); } Console.WriteLine(); Console.WriteLine("Content of: row1.GetValidationTags()"); foreach (var tag in row1.GetValidationTags()) { Console.WriteLine("Validator: {0}, Message: \"{1}\"", tag.ValidatorCell.Validator.GetType().Name, string.Format(tag.Message.FormatString, tag.Message.FormatParameters)); } Console.WriteLine(); Console.WriteLine("Content of: row1.GetValidationTags(cell1)"); foreach (var tag in row1.GetValidationTags(cell1)) { Console.WriteLine("Validator: {0}, Message: \"{1}\"", tag.ValidatorCell.Validator.GetType().Name, string.Format(tag.Message.FormatString, tag.Message.FormatParameters)); } Console.WriteLine(); Console.WriteLine("Content of: row1.GetValidationTags(cell2)"); foreach (var tag in row1.GetValidationTags(cell2)) { Console.WriteLine("Validator: {0}, Message: \"{1}\"", tag.ValidatorCell.Validator.GetType().Name, string.Format(tag.Message.FormatString, tag.Message.FormatParameters)); } Console.WriteLine(); Console.ReadKey(); } private static BcfDataSetSetup CreateTestDataSetSetup() { var dss = new BcfDataSetSetup("Test"); // Table1 BcfTableSetup table1Table = dss.AddTable("Table1"); // Table1.Column1 BcfColumnSetup table1TableColumn1Column = table1Table.AddColumn("Column1"); table1TableColumn1Column.BehaviorItems.Add(new BcfColumnValueSetter()); table1TableColumn1Column.BehaviorItems.Add(new BcfColumnType(typeof(int))); table1TableColumn1Column.BehaviorItems.Add(new BcfColumnTypeConstraint<int>()); table1TableColumn1Column.BehaviorItems.Add(new BcfColumnNotNullConstraint()); table1TableColumn1Column.BehaviorItems.Add(new BcfColumnDefaultValueSource<int>()); // Table1.Column2 BcfColumnSetup table1TableColumn2Column = table1Table.AddColumn("Column2"); table1TableColumn2Column.BehaviorItems.Add(new BcfColumnValueSetter()); table1TableColumn2Column.BehaviorItems.Add(new BcfColumnType(typeof(int))); table1TableColumn2Column.BehaviorItems.Add(new BcfColumnTypeConstraint<int>()); table1TableColumn2Column.BehaviorItems.Add(new BcfColumnNotNullConstraint()); table1TableColumn2Column.BehaviorItems.Add(new BcfColumnDefaultValueSource<int>()); { // Table1.Validator[1] BcfValidatorSetup v = table1Table.AddValidator<GreaterThanValidator>(); v.AllowExecuteParallel = false; BcfParameterSetup p1 = v.AddParameter("GreaterValue", "Column1", true); p1.BehaviorItems.Add(new BcfParameterValueSetter<GreaterThanValidator, int>((fn, value) => fn.GreaterValue = value)); BcfParameterSetup p2 = v.AddParameter("LessValue", "Column2", true); p2.BehaviorItems.Add(new BcfParameterValueSetter<GreaterThanValidator, int>((fn, value) => fn.LessValue = value)); } { // Table1.Validator[2] BcfValidatorSetup v = table1Table.AddValidator<LessThan3Validator>(); v.AllowExecuteParallel = false; BcfParameterSetup p1 = v.AddParameter("Value", "Column1", true); p1.BehaviorItems.Add(new BcfParameterValueSetter<LessThan3Validator, int>((fn, value) => fn.Value = value)); } { // Table1.Validator[3] BcfValidatorSetup v = table1Table.AddValidator<LessThan3Validator>(); v.AllowExecuteParallel = false; BcfParameterSetup p1 = v.AddParameter("Value", "Column2", true); p1.BehaviorItems.Add(new BcfParameterValueSetter<LessThan3Validator, int>((fn, value) => fn.Value = value)); } return dss; } } }
The sample generated output: