private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
SqlConnection conn=new SqlConnection("server=.;database=jijunwu;uid=sa;pwd=;");
if(this.DataGrid1.CurrentPageIndex>0&&this.DataGrid1.CurrentPageIndex==this.DataGrid1.PageCount-1&&this.DataGrid1.Items.Count==1)
{
this.DataGrid1.CurrentPageIndex--;
}
SqlCommand cmd=new SqlCommand("delete from jjw_news where newsid="+id,conn);
conn.Open();
int i=cmd.ExecuteNonQuery();
if(i==1)
{
Response.Write("<Script>alert('删除成功!')</Script>");
}
dg();//从新绑定数据
}

解决方案 »

  1.   


     if(this.DataGrid1.CurrentPageIndex>0&&this.DataGrid1.CurrentPageIndex==this.DataGrid1.PageCount-1&&this.DataGrid1.Items.Count==1)
                {
                    this.DataGrid1.CurrentPageIndex--;
                }
      

  2.   


    ///不知道1楼的对不对,,我没有那样写过,不过看起1楼的代码很有逻辑性
     if(this.DataGrid1.CurrentPageIndex>0&&this.DataGrid1.CurrentPageIndex==this.DataGrid1.PageCount-1&&this.DataGrid1.Items.Count==1)
                {
                    this.DataGrid1.CurrentPageIndex--;
                }
      

  3.   

    不行啊,我用的VS2005,GridView点不出来CurrentPageIndex
      

  4.   

    因为你写在 RowCommand 下面 
    建议你写在delete时间下面
      

  5.   

    Gridview有个专门的删除行事件_RowDeleteing,在那个事件里编程。
    获取行id='"+Gridview1.DataKeys[e.RowIndex].Value.Tostring()+"'
      

  6.   

    删除后要绑定一下.
    xxx.bind();
      

  7.   

    CommandArgument='<%# Container.DataItemIndex %>'>
    哦,你删除是根据这个来删的.
    当删除时
     int i = Convert.ToInt32(e.CommandArgument);
                string id = this.GridView1.DataKeys[i].Value.ToString();
    i实际上已经大于你的实际DataItemIndex值了,有可能越界.
      

  8.   

    http://topic.csdn.net/u/20090819/14/3c30eda5-1c6d-498a-a636-be95ad5bd894.html下面的链接是解决方法:
      

  9.   

    我自己写两个我用到过的吧。 
    第一种: 
    简单地在rowdeleting方法里用 
    e.RowIndex第二种: 
    ((GridViewRow)((Button)e.CommandSource).NamingContainer).RowIndex
    用第二种方法可以..第二种方法通用,而第一种方法只有在onrowdeleting方法事件里才有ROWINDEX参数.