c#datagridview index -1没有值

时间:2014-12-14 08:04:06

标签: c#

我有一个奇怪的例外。有时 - 并非所有时候,当点击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()。

2 个答案:

答案 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;