索引值超出范围,必须为非负值并小于集合大小

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。

参数名: index

分析: 1.gridview的datasource是否重新做了绑定 2.是否设定了datakeynames属性

源错误:


行 50: mycmd.CommandType = CommandType.StoredProcedure;行 51: SqlParameter para_id = new SqlParameter("@id", SqlDbType.Int);行 52: para_id.Value = (int)gv_result.DataKeys[e.RowIndex].Value;行 53: mycmd.Parameters.Add(para_id);行 54: mycmd.ExecuteNonQuery();




昨天我在用gridview做数据删除时遇到这样一个问题,一直出现索引超出范围。必须为非负值并小于集合大小。参数名: index 的错误,郁闷了一阵子,后来才知道需要给Grewview绑定一个主键,也就是在Grewview属性中加入DataKeyNames="主键字段名",

(也可在绑定数据的时候加入,

gv_result.DataSource = mydr;

gv_result.DataKeyNames = new string[] { "mem_id"} ;

gv_result.DataBind)

这样问题得到了解决。

//.aspx

<asp:GridView ID="gv_result" runat="server" AutoGenerateColumns="False" DataKeyNames="mem_id" BorderColor="Black" BorderStyle="None" BorderWidth="0px" CellSpacing="3" GridLines="Horizontal" Width="400px" OnRowDeleting="gv_result_RowDeleting">

          <FooterStyle BackColor="#B5C7DE" BorderColor="#4A3C8C" BorderStyle="None"/>

          <Columns>

            <asp:BoundField DataField="mem_id" HeaderText="编号" />

            <asp:BoundField DataField="mem_account" HeaderText="用户账号" />

            <asp:BoundField DataField="mem_ip" HeaderText="用户ip" />

            <asp:BoundField DataField="mem_regdate" HeaderText="用户注册时间" />

              <asp:HyperLinkField DataNavigateUrlFields="mem_id" DataNavigateUrlFormatString="mod.aspx?id={0}"

                  HeaderText="修改" Text="修改" />

              <asp:HyperLinkField DataNavigateUrlFields="mem_id" DataNavigateUrlFormatString="del.aspx?id={0}"

                  HeaderText="链接删除" Text="删除" />

              <asp:CommandField HeaderText="按钮删除" ShowDeleteButton="True" ButtonType="Button" />

          </Columns>

          <RowStyle BackColor="#C0FFC0" BorderColor="Black" BorderStyle="None" />

          <HeaderStyle BackColor="Gray" BorderColor="Gray" ForeColor="White" />

          <AlternatingRowStyle BackColor="#FF80FF" />

      </asp:GridView>

//.cs

protected void gv_result_RowDeleting(object sender, GridViewDeleteEventArgs e)

    {

        string connstr = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString;

        SqlConnection myconn = new SqlConnection(connstr);

        myconn.Open();

        SqlCommand mycmd = new SqlCommand("MemDel", myconn);

        mycmd.CommandType = CommandType.StoredProcedure;

        SqlParameter para_id = new SqlParameter("@id", SqlDbType.Int);

        para_id.Value = (int)gv_result.DataKeys[e.RowIndex].Value;

        mycmd.Parameters.Add(para_id);

        mycmd.ExecuteNonQuery();

        myconn.Close();

        Response.Write("<script>alert('删除成功!');window.location.href='search.aspx';</script>");

    }

你可能感兴趣的:(Web)