我有一个奇怪的例外。有时 - 并非所有时候,当点击datagridview时,我得到了这个 例外:
System.IndexOutOfRangeException: Index -1 does not have a value.
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e)
at System.Windows.Forms.DataGridView.OnRowEnter(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred)
at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
at System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
at System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
at System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.DataGridView.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr l param)
从List自动重新填充网格。
调试时(使用vs 2013调试模式),异常没有被捕获 - 也许是因为它发生在一个不同的线程中? 我已经看到它发生在其他人身上,但在我的情况下我无法追踪它,因为它并不总是发生。
对此有任何想法都将受到高度赞赏,谢谢
编辑:
下面的答案通常是当前的,但在我的具体情况下,我只需要点击它之前做datagridview.refresh()。
答案 0 :(得分:1)
确保列表中的最大索引小于列表大小 列表中的最大索引必须小于列表大小。有关更多信息,请参阅 Arrays in the Common Type System
确保索引不是负数。 如果索引小于零,则抛出此异常。
确保数据列名称正确无误。 如果提供给System.Data.DataView.Sort属性的数据列名称无效,则可能抛出此异常。有关详细信息,请参阅DataView类。
答案 1 :(得分:0)
我有同样的问题。问题是刷新了DataGridView。
之前是这样的:
myGrid.DataSource = null;
myGrid.DataSource = myList;
我已经解决了这个问题:
myGrid.DataSource = null;
if (myList.Count > 0)
myGrid.DataSource = myList;