Я искал несколько таких вопросов, но не смог найти хороший ответ на мою проблему.Индекс за пределами допустимого диапазона в списке
У меня есть 2 списка, один содержит список номеров чеков, а другой содержит список получателей. Код работал нормально, и я сделал некоторые улучшения проверки ошибок, чтобы предотвратить ошибки пользователя, и теперь я получаю это сообщение
Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс
В отладке я вижу, что в поле списка получателей есть 41 элемент - это правильно, поэтому, когда выбор меняется в списке проверки в этом случае, я должен выбрать этого конкретного получателя платежа. Это второй в списке получателей, а мой индекс имеет значение 1, и эта ошибка появляется.
Я пробовал свои мозги по этой ошибке в течение последних 2 часов ... вот «оскорбительный» код.
(Внутри обработчика событий) ...
queryReadType.Connection = conn;
conn.Open();
queryReadType.Parameters.Add("@fld1", SqlDbType.VarChar, 50).Value = checkNo;
SqlDataReader reader = queryReadType.ExecuteReader();
try
{
int i, zid;
while (reader.Read())
{
int.TryParse(reader["id"].ToString(), out zid);
txtCheckNo.Text = reader["checkno"].ToString();
if (option == 60) // Update
originalCheckNo = txtCheckNo.Text;
int payeeId;
int.TryParse(reader["payeeid"].ToString(), out payeeId);
txtPayeeId.Text = payeeId.ToString();
string payee = reader["payee"].ToString();
for (i = 0; i < payeecnt; i++)
{
if (String.Compare(payee, lstPayee.Items[i].ToString()) == 0)
{
lstPayee.ClearSelected();
//int j = lstPayee.Items.Count; <---- shows 41
lstPayee.SetSelected(i, true); <--- the value of i is 1 which //is the correct payee for this check
break;
}
}
DateTime dtissued = DateTime.MinValue;
//DateTime dtcleared = DateTime.MinValue;
colIndex = reader.GetOrdinal("dateissued");
if (!reader.IsDBNull(colIndex))
dtissued = reader.GetDateTime(colIndex);
.....
Я оценил бы кто-то пролить некоторый свет на то, что может быть неправильно - и он работал отлично - снова этот код внутри изменения элемента выбора для контрольного списка, и, пожалуйста, только положительные комментарии. У меня уже достаточно багажа в рабочий день ... Я заметил, что некоторые участники публикуют комментарии, которые на самом деле не затрагивают проблему, если на это уже был дан ответ, отправьте ссылку.
Заранее спасибо
http://stackoverflow.com/questions/ 20940979/what-is-indexoutofrangeexception-and-how-do-i-fix-it –
PS> Сообщение об ошибке появляется, но правильный «получатель» подсвечивается в списке получателей –
Где вы устанавливаете 'payeecnt'? Попробуйте заменить его на 'lstPayee.Items.Count'. Btw: не следует ли вызывать 'ClearSelected' перед циклом while. В противном случае мы выбираем только последний. –