我正在开发一个使用NHibernate与SQL Server通信的程序,并在DataGridView中显示一个表。
这是我初始化DataSource的方式:
private void UpdateDatabaseBindings()
{
if (InvokeRequired)
{
InvokeUI(UpdateDatabaseBindings);
return;
}
using (var session = NHibernateHelper.OpenSession())
{
dbPeople.DataSource = session.QueryOver<Person>().List();
}
}
当表单打开时,它可以工作。数据显示正确:
但是,当我手动更新数据库(使用SSMS)时,数据不会更新(自然)。因此,我创建了一个运行Timer
的每秒运行的UpdateDatabaseBindings()
,以便再次拉取数据并更新UI。
但是,这会“重置”DataGridView,带来一些令人讨厌的副作用:选择丢失,正在编辑的任何文本都被取消,滚动也会被重置。
有没有办法在不重置DataSource的情况下更新DataGridView?