Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridViewColumn-设置只读抛出;指数超出范围”;在一个奇怪的情况下_C#_Winforms_Datagridview - Fatal编程技术网

C# DataGridViewColumn-设置只读抛出;指数超出范围”;在一个奇怪的情况下

C# DataGridViewColumn-设置只读抛出;指数超出范围”;在一个奇怪的情况下,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一只虫子快把我逼疯了。我有一些通用代码,用于管理(WinForms)应用程序的DataGridView列。设置列标题文本、宽度、显示索引等等 我让一个用户在加载一个特定屏幕时报告了一个bug。起初,我甚至无法复制它,但我最终发现它发生在(a)一个特定列可见时,以及(b)正好有两行数据时(!)。一行数据,工作正常。如果有两行以上的数据,它就可以正常工作。如果有两行数据,则会失败 DataGridView绑定到一个DataTable 这是失败的代码: private static void Ap

我有一只虫子快把我逼疯了。我有一些通用代码,用于管理(WinForms)应用程序的
DataGridView
列。设置列标题文本、宽度、显示索引等等

我让一个用户在加载一个特定屏幕时报告了一个bug。起初,我甚至无法复制它,但我最终发现它发生在(a)一个特定列可见时,以及(b)正好有两行数据时(!)。一行数据,工作正常。如果有两行以上的数据,它就可以正常工作。如果有两行数据,则会失败

DataGridView
绑定到一个
DataTable

这是失败的代码:

private static void ApplyColumnReadOnly(DataGridViewColumn dgvc, IColumn ci) {
    if (dgvc != null && ci != null) {
        dgvc.ReadOnly = ci.IsReadOnly;
    }
}
IColumn
是我用来存储所有列元数据(列标题、是否可见、显示索引、只读等)的接口。我已经检查了
IsReadOnly
属性是否设置正确(如果没有设置,可能会抛出不同的错误)

该列是一个
boolean
列,在
DataGridView
中显示为复选框

以下是我得到的错误:

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

   at System.Collections.ArrayList.get_Item(Int32 index)
   at System.Windows.Forms.DataGridViewRowCollection.SharedRow(Int32 rowIndex)
   at System.Windows.Forms.DataGridView.SetReadOnlyCellCore(Int32 columnIndex, Int32 rowIndex, Boolean readOnly)
   at System.Windows.Forms.DataGridView.RemoveIndividualReadOnlyCellsInColumn(Int32 columnIndex)
   at System.Windows.Forms.DataGridView.SetReadOnlyColumnCore(Int32 columnIndex, Boolean readOnly)
   at System.Windows.Forms.DataGridViewBand.set_ReadOnly(Boolean value)
   at System.Windows.Forms.DataGridViewColumn.set_ReadOnly(Boolean value)
   at Ipreo.Orion.Common.DataGridManager.ApplyColumnReadOnly(DataGridViewColumn dgvc, IColumn ci) 
因此,我发现的解决方法是手动遍历
DataGridView
中的所有行,并手动设置列的
ReadOnly
属性,这似乎是上面堆栈跟踪中发生的情况,但我担心这可能无法很好地扩展

正如我提到的,只有当我正好有两行数据要显示时才会发生这种情况,并且只有一个布尔列才会发生这种情况

我已经广泛地搜索了错误和几乎所有来自堆栈跟踪的方法调用,但据我所知,我似乎是第一个报告此类错误的人


任何关于如何继续(通过修复bug或其他调试工具)的建议或指针都将不胜感激

你能分享代码(例如在github中)并让我调试吗?遗憾的是,不能。代码是专有的。如果有帮助的话,我可以添加更多的上下文,但是这个错误比我编写的任何代码都要深七层,这让我感到困惑。在遍历行时,它似乎失败了,而我的代码根本没有显式引用行。您可以使用更简单的演示,而不是专有的。从技术上讲,它都是专有的,但我将看看是否可以在一个简单的示例中重新创建该错误。这将是最好的,在创建此类演示时,也许你自己会发现一些根本原因。你能分享代码(例如在github中)并让我调试一下吗?遗憾的是,不能。代码是专有的。如果有帮助的话,我可以添加更多的上下文,但是这个错误比我编写的任何代码都要深七层,这让我感到困惑。在遍历行时,它似乎失败了,而我的代码根本没有显式引用行。您可以使用更简单的演示,而不是专有的。从技术上讲,它都是专有的,但我将看看是否可以在一个简单的示例中重新创建该错误。这将是最好的,在创建此类演示时,也许你自己会找到一些根本原因。