我已经搜索了几个这样的问题,但找不到我问题的好答案。
我有2个列表框,一个包含支票号码列表,另一个包含收款人列表。代码工作正常,我做了一些错误检查增强功能,以防止用户错误,现在我收到此消息
指数超出范围。必须是非负数且小于集合的大小。参数名称:index
在调试中我看到收款人列表框有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);
.....
我很感激有人在可能出现的问题上找到了解决方案 - 而且工作完美 - 再次将此代码更改为选中项目更改为检查列表框,请只有正面评论我在工作日有足够的行李已经...我注意到有些会员发表的评论没有真正解决问题,如果已经回复,请发布链接。
提前致谢
答案 0 :(得分:0)
我的赌注是payeecnt没有保持正确的价值。我没有看到它从哪里获得价值。但是,在for block中使用Items.Count值而不是payeecnt,如下所示:
for (i = 0; i < lstPayee.Items.Count; 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;
}
}