【问题标题】:Index was out of range for the first cell of the selected row所选行的第一个单元格的索引超出范围
【发布时间】:2012-01-24 19:15:02
【问题描述】:
playerProfileID = (int)transfersDGV.SelectedRows[transfersDGV.CurrentRow.Index]
                                   .Cells[0].Value;

我收到一条错误消息:“索引超出范围。必须为非负数且小于集合的大小。” 我试图从所选行中获取第一个单元格的值。我做错了什么?

【问题讨论】:

  • 没有选择行吗?还是它的单元格为零?
  • 尝试将这行代码分成两行。一个选择行,然后一个获取单元格。那么它会在哪一个上引发错误?
  • 这里没有足够的代码或信息可供任何人帮助您。这些指数中的哪一个是抱怨的? SelectedRows 还是 Cells?实际上是否选择了任何行? transfersDGV.CurrentRow.Index 是什么?你做过基本的调试吗?
  • 也许可以稍微分解一下,并首先将“transferDGV.CurrentRow.Index”的值分配给一个变量,以确保您获得选定的行。

标签: c# indexing


【解决方案1】:

你会想要使用

transfersDGV.SelectedRows[0].Cells[0].Value

SelectedRows 包含当前选定行的集合。如果选择 1,则它包含该行。如果选择 10,它将包含这 10 个。

您需要检查是否选择了任何行,然后然后取第一个(或您需要的任何一个)来获取第一个单元格的值。

CurrentRow 是当前具有焦点的行,可能在也可能不在所选行中。

【讨论】:

    【解决方案2】:

    SelectedRows 保存选定行的数组。如果选择了 2 行,则其中的最大可访问索引将为 1。您尝试通过 CurrentRow.Index 属性访问它,这是整个网格中行的相对位置。所以你得到索引超出范围异常。如果你 想要

    从所选行中提取第一个单元格的值

    你应该使用

    (int)transfersDGV.SelectedRows[0].Cells[0].Value;
    

    【讨论】:

      【解决方案3】:

      如果不知道您在代码中使用的是什么类型,我无法确定... transfersDGV 是某种迭代器吗?一些迭代器在遍历整个集合后指向集合的结尾或结尾之后。另一种选择是它需要以某种方式初始化。 Cells 为空也可能存在问题,在这种情况下,Cells[0] 实际上会导致异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多