我正在使用C#开发Winforms项目。问题是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都观察到了更改,因此,当我在文本框中更改对象的属性值时,可以看到它们在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不会更新。
像这样向组合框分配了BindingList
bindingSource_Hotel.DataSource = Program.Hotels.OrderBy(r => r.Name);
cmbHotel.DisplayMember = "Name";
cmbHotel.ValueMember = "Name";
bindingSource_Hotel是组合框的数据源。
我要去哪里错了?