Salve a tutti
        // SERVICES - RETURN FROM ADD/UPDATE RECORD
        private void BtnReturnService_Click(object sender, EventArgs e)
        {
            // end edit
            this.tblUserBindingSource.EndEdit();
            this.tblServiceBindingSource.EndEdit();
            // check pending changes
            if (this.dataSetServices.HasChanges())
            {
                if (MessageBox.Show(@"Do you want to abandon pending changes?", 
                                    "Info",MessageBoxButtons.YesNo,MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    // abandon the changes
                    this.dataSetServices.RejectChanges();
                    //this.tblUserBindingSource.CancelEdit();
                    //this.tblServiceBindingSource.CancelEdit();
                }
                else { return; }
            }
            // exit tabpage Editing mode and return home tabpage
            MyExitEditingMode();
        }
Con questo metodo si abbandonano le modifiche in sospeso sui rispettivi bindingSource per le due tabelle TblService e TblUser Relazionate uno a molti
La form che ospita queste due sorgenti contiene :
- tante TextBox quanti sono le colonne della tabella TblService che sono direttamente associate nelle proprietà del dataBinding con la tblServiceBindingSource - NomeColonnaTabella
 - una dataGridView  popolata dai records relazionati alla tabella TblUser con la fKTblUserTblServiceBindingSource che è la chiave esterna di relazione
 
Tutto funziona correttamente sia in fase di inserimento , aggiornamento ed eliminazione records.
Il problema si verifica quando si decide di abbandonare la form e di non salvare le modifiche in sospeso.
con il  tblUserBindingSource.CancelEdit() e tblServiceBindingSource.CancelEdit() ,  cancella le modifiche in sospeso solo di tblUserBindingSource e non riesco a capire perchè non cancella anche le modifiche in tblServiceBindingSource
A questo punto mi sono rifugiato e risolto momentaneamente, con dataSetServices.RejectChanges(); e in questo caso tutto funziona come si deve.
Dove sbaglio con il cancelEdit ?
E' opportuno usare il RejectChanges del dataset ? 
Grazie !!!
:-)