C# dataGridView1.Columns.Clear()引发IndexOutFrange异常

C# dataGridView1.Columns.Clear()引发IndexOutFrange异常,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个包含数据的网格。从视图移动到另一个视图时,我正在清除现有列并添加新列。执行索引下的行时,会引发异常 dataGridView1.Columns.Clear() 如果dataGridView1.Columns为null,那么我应该得到NULLReference异常。在语句中,我没有索引到列集合中,而是只调用clear()方法。我不明白为什么会抛出IndexOutofRange异常 另一件棘手的事情是我修改了代码 try { dataGridView1.

我有一个包含数据的网格。从视图移动到另一个视图时,我正在清除现有列并添加新列。执行
索引下的行时,会引发异常

dataGridView1.Columns.Clear()
如果
dataGridView1.Columns
为null,那么我应该得到NULLReference异常。在语句中,我没有索引到列集合中,而是只调用
clear()
方法。我不明白为什么会抛出
IndexOutofRange
异常

另一件棘手的事情是我修改了代码

    try
     {
         dataGridView1.Columns.Clear();
     }
     catch(Exception ex)
     {
         dataGridView1.Columns.Clear();
     }
在try块中,它抛出异常,在它到达Catch块时,但是在Catch块中,相同的语句执行起来没有任何问题,这使得我理解这个问题变得更加复杂。
请解释发生这种情况的原因。

首先,您不应该将代码放入catch块-您永远不知道会出现哪些副作用!;-)

现在,我想这很大程度上取决于数据网格视图的创建方式(自动、手动)以及用作数据源的内容(绑定源、数据表等)

您可能希望尝试
dataGridView1.DataSource=null然后再次(重新)分配源


希望这有帮助。

我不知道您是否有任何绑定或数据表作为数据源。。。但这可能有助于:

dataGridView1.DataSource = null;
设法
将gridview属性
AutoGenerateColumns关闭

我个人会设置一些检查点,以便在调用引发异常的代码之前显示其中的内容。你准备好了吗
dataGridView1.ColumnCount
某个地方的某个数字不好?同时检查
.Count

在尝试清除未绑定datagridview的行时,我遇到了类似的问题

datagridview1.Rows.Clear
检查datagridview是否未处于编辑模式。我解决了在行之前添加以下行的问题。清除

datagridview1.EndEdit()

你有任何绑定吗?很抱歉,没有回答你的问题,你能详细说明一下吗?你是如何填充datagridview的?我想问题更多的是为什么会发生这种情况。例如,这些方法是如何工作的,异常行为可能会如此复杂。是的,我在catch块中添加了代码,只是为了一般情况,如果答案中包含了对代码意图的解释,以及为什么在不引入其他代码的情况下解决了问题,那么答案会更有帮助