【问题标题】:Adding rows from db to a datagridview将行从 db 添加到 datagridview
【发布时间】:2013-12-07 17:34:46
【问题描述】:

错误:

超出范围的索引必须为非负数且小于集合参数名称索引的大小

代码:

try
 {
     int i = 0;
     Query = "select * from customeritems where cid = '" + GlobalVars.id + "';";
     cmd = new SQLiteCommand(Query, GlobalVars.conn);
     dr = cmd.ExecuteReader();

     if ((dr != null) && (dr.HasRows))
     {
                    dgvItems.Rows.Clear();
                    while (dr.Read())
                    {
                        dgvItems.Rows.Add();
                        dgvItems.Rows[i].Cells[0].Value = dr.GetValue(0).ToString();
                        dgvItems.Rows[i].Cells[1].Value = (i + 1).ToString();
                        dgvItems.Rows[i].Cells[2].Value = dr.GetValue(2).ToString();
                        dgvItems.Rows[i].Cells[3].Value = dr.GetValue(3).ToString();
                        dgvItems.Rows[i].Cells[4].Value = dr.GetValue(4).ToString();
                        dgvItems.Rows[i].Cells[5].Value = dr.GetValue(5).ToString();
                        i++;
                    }
                }
                dr.Close();
                cmd.Dispose();
   }

我在 i++ 上设置了断点。此时它给出了上述错误。有任何想法吗?

附:我得到了第一条记录很好

【问题讨论】:

  • c# ..................................
  • 哪一行抛出异常?
  • 我在while循环的每一行都设置了断点。循环运行一次,直到 i++。此时我按 F5 出现错误“索引超出范围等”
  • 我可以看到您使用 GetValue(0) 从数据库中获取值,但您缺少 GetValue(1) 因为第二列是行索引。所以也许你应该移动索引并且数据库中的最后一列是 4 而不是 5?博士GetValue(4)?基本上我的意思是你的查询结果中有 5 列而不是 6 列?
  • VS 在抛出异常时已经停止执行,你没有在每一行设置断点。

标签: c# datagridview indexoutofboundsexception


【解决方案1】:

我最好的猜测是,您要么违反了 dgvItems 中的 PK 约束或空值约束。当一个插入工作时,这通常是问题的根源,然后下一个插入失败。此外,如果i 大于 5,您似乎会遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多