如何在更新发生时正确加载DataGridView

本文关键字:加载 DataGridView 更新 | 更新日期: 2023-09-27 18:09:24

我不久前实现了一个DataGridView。它很好用。现在我在做一些重载测试,但是失败了。它会在任何地方抛出异常,至少当它试图加载数据时。

问题:DataContext Refresh

有一个方法,我刷新DataGridView内的数据。

一个异常告诉我已经有一个DataReader打开,我必须先关闭它。

第二个异常告诉我"在调用提交更改期间不能执行该操作"。

问题是我自己没有使用DataReaders,我使用的方法如下所示:

 this.bindingSource.EndEdit();
 this.bindingSource.DataSource = null;
 // DataControl is my controler where the table is stored. It is a singleton.
 DataControl.Instance.m_DBTable.Context.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, DataControl.Instance.m_DBTable);
 this.bindingSource.ResetBindings(false);
 this.bindingSource.DataSource = DataControl.Instance.m_DBTable;
我希望有人能在这个问题上帮助我。如有需要,请随时询问更多细节。

感谢

抛出更多异常(不仅在该方法上,而且在同一表单上)

  • 内部连接致命错误
  • Sql DateTime-Overflow(必须在1/1/1753和21/31/9999之间)(我真的总是初始化我所有的日期-时间变量!)
  • 当没有可用数据时,读取操作无效。
  • 无引用异常

如何在更新发生时正确加载DataGridView

任何时候你得到与此有关的错误包装你的数据阅读器在using语句。这适用于任何阅读器/写入器

using(var daraReader = new DataReader())
{
 // Use your data reader here, it will not be left open
}

DataContext实际上不是被设计成单例的,使用singleton模式来Linq to Sql DataContext。这是你在编写代码时首先要考虑的问题。

如果它不工作-尝试至少剖析问题区域(http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。不要绑定数据。试着把它们转储到一个文件或其他地方。我们将确保问题不是由绑定引起的。

如果它不工作,那么很可能你有问题,由于LINQ到SQL和你的数据库的并发问题。看起来标准的锁和机制不能正常工作。或者他们工作太勤奋了。

很少有像样的文章http://blogs.msdn.com/b/matt/archive/2008/05/22/into-to-linq-to-sql-optimistic-concurrency.aspx, http://www.codeproject.com/Articles/38299/How-To-Handle-Concurrency-in-LINQ-to-SQL解释LINQ中的并发性。

我希望它能有所帮助。