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 内の行数を確認する必要があります。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 に答える