2015-12-14 12 views
8

Tôi có một ứng dụng WinForms demo nhỏ. Một trong các Biểu mẫu là biểu mẫu Thêm Người Mới của tôi. Tôi đã sử dụng Chế độ xem chi tiết thay vì số DataGridView từ Nguồn dữ liệu của tôi. Khi tôi nhập dữ liệu và nhấp vào nút lưu trên Bộ điều hướng có 0 thay đổi, Tuy nhiên tôi đặt MovePreviousMoveNext sau AddNew của tôi ở dạng Load, mọi thứ hoạt động như mong đợi.Tại sao tôi cần phải thay đổi Vị trí Nguồn ràng buộc trước khi tôi có thể Lưu các thay đổi

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

Tại sao tôi cần phải chuyển vị trí BindingSource trước khi nhận dạng thay đổi và lưu?

+2

Bạn không cần phải thay đổi vị trí, trên thực tế bạn cần 'BindingSource.EndEdit()' –

+2

Tôi nghĩ bạn chỉ có thể gọi 'EndEdit() '. doh, @RezaAghaei đánh tôi sau 5 giây;) – MickyD

+2

EndEdit hoạt động. Cảm ơn @RezaAghaei, cho cả hai bạn thực sự! – Randy

Trả lời

3

Bạn không cần phải thay đổi vị trí, trên thực tế bạn cần gọi BindingSource.EndEdit áp dụng các thay đổi đang chờ xử lý cho nguồn dữ liệu cơ bản.

Thay đổi vị trí khiến người quản lý tiền tệ cơ bản gọi EndCurrentEdit và đây là phương thức của nguồn ràng buộc EndEdit cho bạn.

Các vấn đề liên quan