Notes on working with WinForms DataBinding

  1. Always handle BindingSource.ListChanged event to avoid unpleasant surprises with BindingSource.Current changing on its own upon EndEdit.
  2. In master detail, call master binding source EndEdit() before calling detail binding source EndEdit
  3. Use ComboBox SelectionChangeCommitted instead of SelectedIndexChanged. The latter will fire during initial databinding
  4. To set default values after BindingSource.AddNew() is called, use the AddingNewEvent
     AddingNewEventHandler h = (o, e) =>
                {
                    WorkDataSet.SessionRow session = (sessionBindingSource.List as DataView).AddNew().Row as WorkDataSet.SessionRow;
                    session.UserID = Program.Server.UserID;
                    session.SessionID = Guid.NewGuid().ToString();
                    session.Duration = 0.5M;
                    sessionBindingSource.MoveLast();
                    e.NewObject = session;
                };
    
                sessionBindingSource.AddingNew += h;
                sessionBindingSource.AddNew();
                sessionBindingSource.AddingNew -= h;
    

About this entry