![]() | |
Ignoring changes on spcific columns in HasChanges |
In this example a custom implementation is used to ignore value changes on all columns named "Id".
Code Item | Meaning |
---|---|
SampleDataSet | Your BcfDataSets class name. |
SampleDataSetSetup | Your BcfDataSetSetups class name. |
MyTransaction | Custom implementation inheriting BcfTransaction. |
MyTransactionFactory | Custom implementation inheriting BcfDataSetTransactionFactory. |
MyStateIdBehavior | Custom implementation inheriting BcfDataSetStateIdBehavior. |
public class MyTransaction : BcfTransaction { protected internal MyTransaction(BcfTransactionBuilder builder) : base(builder) { } // returns true if anything other than columns named "Id" were changed public bool HasSeriousChanges() { return CompensationRepository.Items.Any( item => { var setValueItem = item as BcfUndoRedoItemSetValue; return setValueItem == null || setValueItem.Cell.Column.Name != "Id"; }); } }
public class MyTransactionFactory : BcfDataSetTransactionFactory { protected override BcfTransaction CreateTransaction(BcfTransactionBuilder builder) { return new MyTransaction(builder); } }
public class MyStateIdBehavior : BcfDataSetStateIdBehavior { protected override Guid Generate(BcfTransaction transaction) { if (((MyTransaction) transaction).HasSeriousChanges()) { // there were serious changes -> generate a new state id return base.Generate(transaction); } // no serious changes -> return previous state id return Value; } }
partial class SampleDataSet { private Guid acceptedStateIdField; public bool HasChanges { get { return Behavior.StateIdItem.Value != acceptedStateIdField; } } public void AcceptChanges() { acceptedStateIdField = Behavior.StateIdItem.Value; } }
... // - modifying DataSetSetup to use my transaction and my state id behavior - // you should use BCF Editor to add the behaviors // however - this lines shows how to do this in code var mySampleDataSetSetup = new SampleDataSetSetup(); mySampleDataSetSetup.BehaviorItems.Add(new MyTransactionFactory()); mySampleDataSetSetup.BehaviorItems.Add(new MyStateIdBehavior()); var mySampleDataSet = new SampleDataSet(mySampleDataSetSetup); ...