BindingList更新对象更改,但忽略新的或删除的对象

时间:2019-03-29 11:23:29

标签: c# .net winforms datasource bindinglist

我正在使用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中正在更新。

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不会更新。

像这样向组合框分配了BindingList

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

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

bindingSource_Hotel是组合框的数据源。

我要去哪里错了?

0 个答案:

没有答案