0

我已经搜索了几个这样的问题,但找不到我的问题的好答案。

我有 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);

......

我很感激有人能解释一下可能出了什么问题——而且它工作得很好——再次检查列表框的选择项中的这段代码更改了,请只给我积极的评论,我的工作日已经有足够的行李了.. . 我注意到有些成员发表的评论并没有真正解决这个问题,如果已经回答,请发布链接。

提前致谢

4

2 回答 2

0

我敢打赌 payeecnt 的价值不正确。我看不出它的价值从何而来。但是,在您的 for 块中使用 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;
   }
}
于 2015-09-05T16:38:01.427 回答
0

请关闭此帖。我找到了问题的原因(并修复了它)。我要感谢那些尝试和帮助的人。我想在发布问题时学习如何格式化代码,该网站在工具栏中提到了一个工具,但我找不到它......

保罗

于 2015-09-10T17:24:24.447 回答