每当使用DataGridView在Windows窗体中调用components.dispose()时,我都会遇到此错误。当我退出应用程序时,在form_Closed事件之后的Dispose函数中调用Components.dispose()。
DataGridView中出现以下异常:
System.IndexOutOfRangeException:索引0没有值。 在System.Windows.Forms.CurrencyManager.get_item(Int32索引) 在System.Windows.Forms.DataGridViewDataConnection.GetError(Int32 rowIndex)
要替换此默认对话框,请处理DataError事件。
我怀疑CurrencyManager与datagridview数据源没有正确同步。因此,它仍然试图同步思考数据源中的项目,实际上,项目已经被处置。
解决方案1
将datagridview的tabStop属性设置为False。这可以防止datagridview成为'tab-able'
解决方案2
Calling .dispose() on datagridview explicitly
问题
tabIndex属性如何影响CurrencyManager,为什么将tabStop设置为false可以正确同步CurrencyManager?我已经阅读了关于Lazy Initialization的原因,但我仍然没有看到延迟初始化,tabIndex和CurrencyManager之间的链接。