0

我遇到了一个例外

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

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

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;
      }
   }

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

4

1 回答 1

3

在访问其中的行之前,您需要检查 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你在数据表中。

于 2012-11-19T10:02:16.713 回答