protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Del")
{
int iIndex = Convert.ToInt32(e.CommandArgument);
string sUserID = GridView1.DataKeys[iIndex].Value.ToString();
SqlConnection con = new SqlConnection("server=.;database=Forum;uid=sa");
SqlCommand cmd = new SqlCommand("delete from tbUser where UserID=@UserID");
con.Open();
cmd.Parameters.AddWithValue("@UserID", sUserID);
Response.Write(string.Format("<script>alert('删除了{0}条记录')</script>", cmd.ExecuteNonQuery()));
bind();
}
}
报错:
索引超出范围。必须为非负值并小于集合大小。
参数名: index 请高手看下
{
if (e.CommandName == "Del")
{
int iIndex = Convert.ToInt32(e.CommandArgument);
string sUserID = GridView1.DataKeys[iIndex].Value.ToString();
SqlConnection con = new SqlConnection("server=.;database=Forum;uid=sa");
SqlCommand cmd = new SqlCommand("delete from tbUser where UserID=@UserID");
con.Open();
cmd.Parameters.AddWithValue("@UserID", sUserID);
Response.Write(string.Format("<script>alert('删除了{0}条记录')</script>", cmd.ExecuteNonQuery()));
bind();
}
}
报错:
索引超出范围。必须为非负值并小于集合大小。
参数名: index 请高手看下
e.CommandArgument绑定是ID值么?
还要string sUserID = GridView1.DataKeys[iIndex].Value.ToString(); 这行代码做啥?
不用绑定e.CommandArgument!!!
事件里
if (e.CommandName == "Del")
{
int iIndex = Convert.ToInt32(e.CommandArgument);
Response.write(string.Format("删除的是第{0}行",iIndex+1));
}
你看能不能显示
to:sz_free_bird 太有耐心。
to:yantaizhifuqishanlu 没有任何人有任何的责任去给你解决问题。
大家都是帮忙的,因为也是别人帮忙走到这一步的。
所以不管说话还是问问题的口气,都要客气点。你的自己代码写错,还在埋怨别人。 你已经取到主键,还把主键放到集合中去做索引,脱了裤子放屁取到的已经主键了。。就可以当sUserID 来用了。在给你个建议,你的代码风格不好,.NET是采用Pascal命名规则的,没有必要在第一个字母上说明这个变量的类型。。
任何给意见了人我都表示感谢,除了啥都不懂还说别人脱了裤子放屁的,
int iIndex = Convert.ToInt32(e.CommandArgument);得的只是行索引,要通过它才能得主建,你回家慢慢笑吧
当你明白 地球不是为你而转的时候,你才能真正的长大。
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" runat="server"
CommandArgument='<%# Eval("CasestId") %>' CommandName="Del" Text="Button" />
</ItemTemplate>
</asp:TemplateField>
这样直接绑定表的ID就不用脱了裤子放屁。
虚心点。
下次不会再回你的贴。