【问题标题】:Error There is no row at position 1错误 位置 1 没有行
【发布时间】:2012-11-20 11:27:27
【问题描述】:

我遇到了异常

System.ArgumentOutOfRangeException:位置 1 没有行。 RBTree`1.GetNodeByIndex(Int32 userIndex)**

位置处没有行可以是 0 或 1 或 2 。我想我正在尝试读取或写入一些超出数组边界的数组元素。代码sn-p如下所示

public void ManageAlarm(string textName, int leaveValue)
{
   try
   {
      int indices = team.Find(textName);
      if (indices >= 0)
      {
         DataRow row = teamTable.Rows[indices];
         row[m_leaveValues] = leaveValue;
      }
   }

我应该在这里做什么来防止这个警报跟踪

【问题讨论】:

    标签: c# .net visual-studio-2010


    【解决方案1】:

    在访问 m_tblAlert 中的行之前,您需要检查其中的行数。 m_tblAlert.Rows.Count must be greater then indx

    public void ManageDuplicateAlarm(string alertName, int dupValue)
    {
       try
       {
          int indx = m_alerts.Find(alertName);
          if (indx >= 0 && m_tblAlert.Rows.Count > indx)
          {
             DataRow row = m_tblAlert.Rows[idx];
             m_dcDuplicates.ReadOnly = false;
             row[m_dcDuplicates] = dupValue;
             m_dcDuplicates.ReadOnly = true;
          }
       }
    

    编辑更多关于 OP 评论的解释

    你是 checking indx >= 0 to make sure that that -1 could not be row index 声明 m_tblAlert.Rows[idx]; Similarly you need to check if the value return by m_alerts.Find(alertName) must be valid row number i.e it should not be greater then the number of rows你在数据表中。

    【讨论】:

    • 您正在检查 indx >= 0 以确保 -1 不能成为语句 m_tblAlert.Rows[idx]; 的行索引;同样,您需要检查 m_alerts.Find(alertName) 返回的值是否必须是有效的行号,即它不应大于数据表中的行数。
    • 预期行为取决于它在代码中的处理方式。
    • 所以根据你的回答,如果索引超出边界,它会跳过。这意味着我们会丢失任何数据
    • 如果索引超出边界,那么您必须重新访问返回索引的方法。这是一种情况,一条街上有 1 号到 10 号房子,有人告诉你他住在那条街的 12 号房子里。
    • 我不知道数据表的最大长度可能取决于您机器上安装的内存 (RAM)。我认为您需要在表数据和 m_alerts.Find() 返回的结果之间进行同步(映射),而不是增加表大小。您可能需要在表中搜索某些列值而不是行索引。
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多