可能是在翻页后进行了删除操作,删除了一些记录,然而在翻页事件里的值NewPageIndex 却没有变化,导致访问超出界限。你可以在void DataGrid1_PageIndexChanged(object sender, DataGridPageChangedEventArgs e) {
        try {
             DataGrid1.CurrentPageIndex=e.NewPageIndex;
        catch 
        {
              DataGrid1.CurrentPageIndex=e.NewPageIndex-1;
        
         }       
         binddata();
    }

解决方案 »

  1.   

    if(this.DataGrid1.CurrentPageIndex!=0&&this.DataGrid1.Items.Count==1)//加个判断
    this.DataGrid1.CurrentPageIndex--;
      

  2.   

    在datagrid控件执行翻页时也会触发DataGrid1_ItemCommand 事件的?你会不会在这里有事件触发?
    也有可能触发了DeleteCommand 事件,在翻页的时候你调试一下这个事件是否执行了?
      

  3.   

    try
    {
      sqlcomm.ExecuteNonQuery();
      Label1.Text = "<b>已删除记录</b><br>" + delstr;
      if(this.DataGrid1.CurrentPageIndex!=0&&this.DataGrid1.Items.Count==1)//加个判断
      this.DataGrid1.CurrentPageIndex--;
    }
      

  4.   

    public void Page_Load(Object sender,EventArgs e)
        {
            binddata();
            if(!IsPostBack)
            {
                binddata();
                Label1.Visible=false;
             }
        }改为:
    public void Page_Load(Object sender,EventArgs e)
        {
            if(!IsPostBack)
            {
                binddata();
                Label1.Visible=false;
             }
        }
    另外在DeleteCommand事件处理程序中的sqlconn.Close();之后,还应该重新绑定数据,为防止当前页已没有数据,可以跳转到第一页,象这样:sqlconn.Close();
    DataGrid1.CurrentPageIndex=0;
    binddata();