索引超出范围
请各位帮忙看一下我这段代码有什么问题,改了几次,运行了几次都出现同样的问题:索引超出范围。必须为非负值并小于集合大小。 谢谢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