当前位置:编程学习 > C#/ASP.NET >>

索引超出范围

请各位帮忙看一下我这段代码有什么问题,改了几次,运行了几次都出现同样的问题:索引超出范围。必须为非负值并小于集合大小。         谢谢
 protected void gv_User_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Del")
        {
            int iIndex = Convert.ToInt16(e.CommandArgument);
            string sUserID = gv_User.DataKeys[iIndex].Value.ToString();
            string DelSql = "delete from tbUser where UserID=@UserID";
            using (SqlConnection conn = new SqlConnection(sConnectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(DelSql, conn))
                {
                    cmd.Parameters.AddWithValue("@UserID", iIndex);
                    ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('删除了{0}条记录');</script>", cmd.ExecuteNonQuery()));
                    SetBind();
                }
            }
        }
    } --------------------编程问答-------------------- iIndex的值有问题?自己调试看下 --------------------编程问答-------------------- 在sql连接中产生的索引超出范围。必须为非负值并小于集合大小这种错误 一定是你的sql语句中列名写错了 --------------------编程问答-------------------- int iIndex = Convert.ToInt16(e.CommandArgument);
string sUserID = gv_User.DataKeys[iIndex].Value.ToString();

肯定是这里出了问题。。。自己调试看iIndex为几。。。 --------------------编程问答-------------------- CommandArgument='<%# Eval("UserID") %>'


int id = Convert.ToInt32(e.CommandArgument.ToString()); 
--------------------编程问答-------------------- 有可能是你要删除的那条数据已经不存在了,数据没有刷新过来! --------------------编程问答-------------------- 将事件源的CommandArgument设为Eval("UserID"),然后int iIndex = Convert.ToInt16(e.CommandArgument)
这行string sUserID = gv_User.DataKeys[iIndex].Value.ToString();去了 --------------------编程问答-------------------- string sUserID = gv_User.DataKeys[iIndex].Value.ToString();
这个sUserID有什么用吗。。
在那个gridview里面的DataKeys中有绑定数据吗 --------------------编程问答-------------------- 还有一个方法,不需要设CommandArgument,后台直接这样
 protected void gv_User_RowCommand(object sender, GridViewCommandEventArgs e)
  {
  if (e.CommandName == "Del")
  {

  string sUserID = gv_User.DataKeys[e.RowIndex].Value.ToString();
  string DelSql = "delete from tbUser where UserID=@UserID";
  using (SqlConnection conn = new SqlConnection(sConnectionString))
  {
  conn.Open();
  using (SqlCommand cmd = new SqlCommand(DelSql, conn))
  {
  cmd.Parameters.AddWithValue("@UserID", iIndex);
  ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('删除了{0}条记录');</script>", cmd.ExecuteNonQuery()));
  SetBind();
  }
  }
  }
   --------------------编程问答--------------------  没什么大事:
基本上两种情况:你需要的那个ID号取的不是同一个数据源,导致假如其中一个数据源只有8条数据,但是查的数据源有16条数据,那么再取到第九条数据那么就会报错

第二种情况就是id号根本没跟数据源挂钩,或者没有数据,那么你要取数据就会报错 --------------------编程问答-------------------- 肯定是没有设置datakeys属性! --------------------编程问答-------------------- string sUserID = gv_User.DataKeys[iIndex].Value.ToString();
这句话改成:string sUserID = gv_User.DataKeys[e.ItemIndex].Value.ToString();
--------------------编程问答-------------------- 设个断定运行看一下.
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,