I have a DataGridView bound to a BindingList (C# Windows Forms). If I change one of the values in an item in the list it does not immediately show up in the grid. If I click
It sounds as your Change Object notification is not triggered / handled correctly. I personally always use the BindingSource object when binding to a dataGridView.
I would check out the DataGridView FAQ and the DataBinding FAQ and search for object change notification.
If you are using ADO.Net, don't forget the call the .Validate() and .EndEdit() methods.
ListChanged
notifications for item value changes are only raised if the list item type implements theINotifyPropertyChanged
interface.
Taken from: http://msdn.microsoft.com/en-us/library/ms132742.aspx
So my first question would be: Implements your item the INotifyPropertyChanged properly?
private void refreshDataGrid()
{
dataGridView1.DataSource = typeof(List<>);
dataGridView1.DataSource = myBindingList;
dataGridView1.AutoResizeColumns();
dataGridView1.Refresh();
}
Then, just call for the refreshDataGrid Method anytime a change occurs to your list.
Your datasource should implement INotifyPropertyChanged
for any change in the BindingList to be reflected in the datagridview.
class Books : INotifyPropertyChanged
{
private int m_id;
private string m_author;
private string m_title;
public int ID { get { return m_id; } set { m_id = value; NotifyPropertyChanged("ID"); } }
public string Author { get { return m_author; } set { m_author = value; NotifyPropertyChanged("Author"); } }
public string Title { get { return m_title; } set { m_title = value; NotifyPropertyChanged("Title"); } }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string p)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
BindingList<Books> books= new BindingList<Books>();
datagridView.DataSource = books;
Just call myBindingList.ResetBindings()
whenever your data changes!