ResolvingConcurrencyConflicts
-----------------------------
Shows how to resolve concurrency conflicts in database update. 

Concurrency conflicts occur when another user changes
the record that you are trying to update.

1. Run the project, press the Edit Selected Order button twice
for the same order row, opening two modeless forms editing
the same order.

2. Change the UnitPrice in the first form and press the Update button.
Then change the UnitPrice in the second form (in the same row,
for the same ProductID) to a number greater than that you used
in the first form and press the Update button. The update will
succeed, although there was a concurrency conflict. The conflict
was resolved in the data library, see code in
tableOrderItems_Logic_AfterUpdateRow, DataClass.cs.

Now repeat steps 1 and 2, but this time make the value
in the second form less than the value in the first form.
The conflict will not be resolved on the server,
in tableOrderItems_Logic_AfterUpdateRow, it will be passed to
the client firing the UpdateError event. That event code
(see c1DataSet1_UpdateError, ViewOrderForm.cs) executing
in the client application, opens a form allowing the
end user to specify the value for update.

The sample also demonstrates various property settings in C1DataObjects
schema that affect the update process. Open the Schema Designer
on the schemaDef component in DataClass.cs to see the
property settings. The settings ensure the following behavior:

- Property setting: Quantity.UpdateLocate = False. A Quantity value is
  always accepted in update, even if it was changed in the database by another user. 

- Property setting: Quantity is not sent for Update unless it has been
  changed, to avoid overwriting other users changes if the current user has not   changed the Quantity field. 

- Property setting: ProductID.UpdateSet = Never. ProductID value cannot
  be changed in the database.

- Property setting: Discount.UpdateIgnore = True. Discount value cannot be
  changed in the database.
















