BindingList обновляет изменения объекта, но игнорирует новые или удаленные объекты - PullRequest
0 голосов
/ 29 марта 2019

Я работаю над проектом Winforms, использующим C #.Проблема в том, что объект BindingList обновляет изменения, но мои DataGrid и Combox Box игнорируют новые или удаленные объекты, которые добавляются или удаляются из BindingList, если я не переназначу BindingList для источника данных.

Я инициализирую и загружаю данные в BindingList при запуске приложения.

namespace PriceComparer
{
    static class Program
    {
        public static BindingList<Models.Hotel> Hotels;

        [STAThread]
        static void Main()
        {
           Application.EnableVisualStyles();
           Application.SetCompatibleTextRenderingDefault(false);
           Hotels = new BindingList<Models.Hotel>(Models.Hotel.LoadHotels());                

           Application.Run(new Dashboard());            
       }
    }
}

Это мой объект

namespace PriceComparer.Models
{
    public class Hotel
    {
        public string HotelCode { get; set; }
        public string Name { get; set; }
    }
}

Связанные с данными DataGrid, TextBox и ComboBoxes allнаблюдайте за изменениями, поэтому, когда я изменяю значение свойства объекта в текстовых полях, я вижу, как они обновляются в DataGrid.

enter image description here

Я назначаю BindingList как

bindingSource_FindHotel.DataSource = 
    Program.Hotels.Where(r => r.Name.ToLower().Contains(txtHotelName.Text.ToLower()));

Однако, когда я пытаюсь удалить элемент из BindingList, я использую следующий код, объект удаляется из BindingList, но DataGrid не обновляется ...

    private void dataGridFindHotel_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == btnDelete.Index)
        {
            Models.Hotel hotel = (Models.Hotel)bindingSource_FindHotel.Current;

            if(hotel != null)
            {                    
                Program.Hotels.Remove(hotel);
                Models.Hotel.SaveHotels(Program.Hotels);                    
            }
        }
    }

Кроме того, когда я добавляю элемент в BindingList Program.Hotels, DataGrid и Combobox не обновляются, пока я не обновлю или не переназначу DataSource.

Comboboxназначил BindingList следующим образом:

bindingSource_Hotel.DataSource = Program.Hotels.OrderBy(r => r.Name);

cmbHotel.DisplayMember = "Name";
cmbHotel.ValueMember = "Name";

bindingSource_Hotel - это источник данных для комбинированного списка.

Где я ошибаюсь?

...