static public void UpdateChangeLog(BindingSource binding, int parentREF)
 {
   DaChangeLog daChangeLog = new DaChangeLog(DataStore.DbConnection);
   BindingList<DdChangeLogExt> list = (BindingList<DdChangeLogExt>)binding.DataSource;
   try
   {
     using (TransactionScope scope = new TransactionScope())
     {
     foreach (DdChangeLogExt item in list)
     {// do deletes first
       bool existing = daChangeLog.GetById(item.Id);
       if (existing && item.DeleteFlag)
       {// delete here - avoid validation
         daChangeLog.DeleteById(item.Id);
       }
     }
     
     foreach (DdChangeLogExt item in list)
     {
       if (item.DeleteFlag) continue; // already done above
       //if (item.Id == string.Empty) continue; // already done above
       bool existing = daChangeLog.GetById(item.Id);
       if (!existing)
       {
         daChangeLog.Clear();
       }
       daChangeLog.Comments = item.Comments;
       daChangeLog.FsaRevisionLogREF = item.FsaRevisionLogREF;
       daChangeLog.FsaStaffREF = item.FsaStaffREF;
       daChangeLog.Function = item.Function;
       daChangeLog.MachineName = item.MachineName;
       daChangeLog.Reference = item.Reference;
       daChangeLog.TargetTableName = item.TargetTableName;
       daChangeLog.TargetTableREF = item.TargetTableREF;
       daChangeLog.TargetTableTimestamp = item.TargetTableTimestamp;
       daChangeLog.UserDomainName = item.UserDomainName;
       daChangeLog.UserName = item.UserName;
       if (!existing)
       {
         daChangeLog.Insert();
       }
       else
       {
         if (!daChangeLog._IsModified) continue;
         daChangeLog.Save();
       }
     }
       scope.Complete();
     }
     binding.DataSource = GetChangeLogList();
   }
   catch (AppEx)
   {
     throw;
   }
   catch (Exception exc)
   {
     throw new AppEx(exc, "Error updating ChangeLog");
   }
 }
 static public bool DeleteChangeLog(DdChangeLogExt item)
 {
   DaChangeLog da = new DaChangeLog(DataStore.DbConnection);
   return da.DeleteById(item.Id);
 }