2015-12-14 17 views
8

Ho una piccola app demo di WinForms. Uno dei moduli è il mio modulo Aggiungi nuova persona. Ho usato la vista dettagli invece del DataGridView dalle mie origini dati. Quando inserisco i dati e faccio clic sul pulsante di salvataggio sul Navigatore, non ci sono cambiamenti, tuttavia inserisco uno MovePrevious e uno MoveNext dopo il mio AddNew nel formato Load, tutto funziona come previsto.Perché è necessario modificare la posizione della sorgente di rilegatura prima di poter salvare le modifiche

public partial class AddPersonForm : Form 
{ 
    private readonly DemoContext _context; 

    public AddPersonForm() 
    { 
     _context = new DemoContext(); 
     InitializeComponent(); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     _context.People.Load(); 

     personBindingSource.DataSource = _context.People.Local.ToBindingList(); 

     personBindingSource.AddNew(); 
     personBindingSource.MovePrevious(); 
     personBindingSource.MoveNext(); 

     base.OnLoad(e); 
    } 

    private void personBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
    { 
     int changes = _context.SaveChanges(); 
     Debug.WriteLine("# of changes: " + changes); 
    } 
} 

Perché devo per alternare la posizione BindingSource prima che possa riconoscere i cambiamenti e salvare?

+2

Non è necessario cambiare posizione, infatti è necessario 'BindingSource.EndEdit()' –

+2

Penso che si possa semplicemente chiamare 'EndEdit()'. doh, @RezaAghaei mi ha battuto di 5 secondi;) – MickyD

+2

EndEdit funziona. Grazie a @RezaAghaei, a tutti e due davvero! – Randy

risposta

3

Non è necessario modificare la posizione, infatti è necessario chiamare BindingSource.EndEdit per applicare le modifiche in sospeso all'origine dati sottostante.

La modifica della posizione fa sì che il gestore valuta sottostante chiami EndCurrentEdit e questo è ciò che fa il metodo EndEdit di origine collegamento per l'utente.

Problemi correlati