Я работаю над проектом 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.
Я назначаю 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 - это источник данных для комбинированного списка.
Где я ошибаюсь?