【问题标题】:dataGridView1.Columns.Clear() throwing IndexOutOfRange exceptiondataGridView1.Columns.Clear() 抛出 IndexOutOfRange 异常
【发布时间】:2016-04-18 12:43:22
【问题描述】:

我有一个网格,里面有数据。从视图移动到另一个视图时,我正在清除现有列并添加新列。执行下面的行时会抛出IndexOutOfRange 异常。

dataGridView1.Columns.Clear()

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

这里的另一个棘手的事情是我修改了代码

    try
     {
         dataGridView1.Columns.Clear();
     }
     catch(Exception ex)
     {
         dataGridView1.Columns.Clear();
     }

在 try 块中它抛出异常并且它正在进入 Catch 块,但在 catch 块中,相同的语句正在执行而没有任何问题,这让我理解这个问题变得更加复杂。 请解释为什么会这样。

【问题讨论】:

  • 你有绑定吗?
  • 抱歉没有收到您的问题,能否详细说明一下?
  • 如何填充数据网格视图?

标签: c# winforms datagridview


【解决方案1】:

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

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

您可能想尝试dataGridView1.DataSource = null;,然后再次(重新)分配源。

希望这会有所帮助。

【讨论】:

  • 我认为问题更多是关于为什么会发生这种情况......即这些方法是如何工作的,异常行为可能如此复杂。
  • 是的,我已经在 catch 块中添加了代码来说明正在发生的事情
【解决方案2】:

我不知道您是否有任何绑定或 DataTable 作为数据源...但这可能会有所帮助:

dataGridView1.DataSource = null;

【讨论】:

    【解决方案3】:

    尝试 切换gridview属性AutoGenerateColumns off

    【讨论】:

    • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助
    【解决方案4】:

    就我个人而言,我会设置一些检查点,以便在您调用引发异常的代码之前显示其中的内容。你在设置 dataGridView1.ColumnCount 某个地方的数字不好?还要检查.Count

    【讨论】:

      【解决方案5】:

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

      datagridview1.Rows.Clear
      

      检查您的 datagridview 是否未处于编辑模式。我解决了在 rows.clear 之前添加以下行的问题

      datagridview1.EndEdit()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 2011-05-30
        • 1970-01-01
        • 2011-02-25
        • 2012-01-24
        相关资源
        最近更新 更多