我已经搜索了几个这样的问题,但找不到我的问题的好答案。
我有 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);
......
我很感激有人能解释一下可能出了什么问题——而且它工作得很好——再次检查列表框的选择项中的这段代码更改了,请只给我积极的评论,我的工作日已经有足够的行李了.. . 我注意到有些成员发表的评论并没有真正解决这个问题,如果已经回答,请发布链接。
提前致谢