代码之家  ›  专栏  ›  技术社区  ›  James

C索引超出了数组的界限

  •  2
  • James  · 技术社区  · 15 年前

    我希望有人能为我继承的一个例外提供帮助。基本上,我将把数据报中的行写到一个文本文件中。除了行被隐藏时,行被隐藏时,在下面突出显示的行中抛出异常“索引在数组边界之外”。谢谢你的帮助。

    DataRow dr;
    
    for (int i = 0; i < bindingManagerBase.Count; i++)
    
    {bindingManagerBase.Position = i;
    
        dr = ((DataRowView)bindingManagerBase.Current).Row;
    
        bindingManagerBase.SuspendBinding();
        try
        {
    
            int rowIndex = dr.Table.Rows.IndexOf(dr);
    
            if (!rowsDisplayStatus[rowIndex])  //<---------Exception here "Index was outside the bounds of the array" //Picture below
            {
                m_Dgv.Rows[rowIndex].Visible = false;
                continue;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString()); 
        }
        finally
        {
            bindingManagerBase.ResumeBinding();
        }
        writeData(tw, dr);
        iIndex++;
    }
    

    alt text http://i28.tinypic.com/14e84mg.png

    6 回复  |  直到 15 年前
        1
  •  2
  •   Mark Ingram    15 年前

    您正在获取行索引,然后尝试将其与 rowsDisplayStatus . 不能将数据库行索引用作集合的索引。

    我会改变:

    if (!rowsDisplayStatus[rowIndex]) 
    

    到:

    if (!rowsDisplayStatus[i]) 
    
        2
  •  1
  •   Dustin Campbell    15 年前

    如何填充RowsDisplayStatus?如果它只包含一个元素,而索引9中应该包含一些内容,那么您应该看看填充它的代码。

        3
  •  0
  •   Ben Lesh    15 年前

    如图所示,rowsdisplaystatus中有一项…你试图拉第10个项目(或索引9处的项目)该索引超出范围。

        4
  •  0
  •   shanabus    15 年前

    “如何” 行显示状态 “人口稠密?也许那套程序有问题。

        5
  •  0
  •   pashute    15 年前

    我来解释一下马克上面说的话。(不知道怎么评论,所以把这个写在答案里) 他是对的,你应该改变

    if (!rowsDisplayStatus[rowIndex])
    

    进入

    if (!rowsDisplayStatus[i])
    

    原因如下:

    即使在先前从Rows对象中删除的行中,RowIndex也会增长。因此dr.table.rows中只能有一行或两行,但是它们可以有索引(indice),例如8和9(因为以前的第1行到第7行被删除或由于其他原因)。

    因此,您可以通过检查bindingManager.current.rowIndex属性来获取当前的rowIndex。

    但是,rowsdisplaystatus是一个简单的数组(或arraylist),根据i,行的数量是正确的。所以对于行索引:8(第一行),您应该查看rowsdisplaystatus[0](这是i的值),对于行索引:9(第二行),您应该查看rowsdisplaystatus[1]。等。

    Moshe

        6
  •  0
  •   jay_t55    15 年前

    基本上,当我收到这个错误时,索引(或我设置的值)在被引用时是不存在的。

    例如,如果一个列表框中有两个项目,并且我试图引用第三个项目,我将收到一个超出范围的索引异常(在过去很多次)。