2015-12-14 15 views
8

Mam małą aplikację WinForms demo. Jednym z formularzy jest formularz Dodaj nową osobę. Użyłem widoku szczegółów zamiast DataGridView z moich źródeł danych. Po wprowadzeniu danych i kliknięciu przycisku zapisywania w nawigatorze są zerowe zmiany, jednak umieszczam MovePrevious i MoveNext po moim AddNew w postaci Load, wszystko działa zgodnie z oczekiwaniami.Dlaczego muszę zmienić pozycję źródła wiązania, zanim mogę zapisać zmiany

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); 
    } 
} 

Dlaczego muszę przełączać położenie pozycji BindingSource, zanim będzie rozpoznawać zmiany i zapisać?

+2

Nie musisz zmieniać pozycji, w rzeczywistości potrzebujesz 'BindingSource.EndEdit()' –

+2

Myślę, że możesz po prostu wywołać 'EndEdit()'. doh, @RezaAghaei pokonał mnie 5 sekund;) – MickyD

+2

EndEdit działa. Dzięki @RezaAghaei, obaj naprawdę! – Randy

Odpowiedz

3

Nie trzeba zmieniać pozycji, w rzeczywistości należy zadzwonić pod numer BindingSource.EndEdit, który stosuje oczekujące zmiany w źródle danych.

Zmiana pozycji powoduje, że podstawowy menedżer walut wywołuje EndCurrentEdit i to właśnie robi metoda wiążącego źródła EndEdit.

Powiązane problemy