gridView_RowDeleting方法中,两次调用BindGrid(),第一次调的目的是什么

解决方案 »

  1.   

    第一次BindGrid(gridView,   true)如果不写的话DeleteCommand.Parameters[i].Value   =   gridView.DataKeys[e.RowIndex].Values[DeleteCommand.Parameters[i].SourceColumn];  会出错
    提示:索引超出範圍。必須為非負數且小於集合的大小。
    參數名稱: index 
    加上这句的话删除时删除的总是第一个页面上的记录
      

  2.   

    要翻页的话,好像要用到一个pageindex之类的东东
      

  3.   

    问题可能出在你的Load函数中了,可能是把pageindex重置了。
      

  4.   

    先把所有的CODE贴出来,希望大家帮帮忙
     public class SingleGridViewPage : SingleFormViewPage
        {
           public  System.Web.UI.WebControls.GridView gridView = null;
            #region Constructor
            public SingleGridViewPage()
            {
               
            }
            protected override void Page_Load(object sender, EventArgs e)
            { 
                base.Page_Load(sender, e);          
                   
                    GetVisible();
                    if (IsPostBack)
                        return;
                    System.Web.UI.WebControls.GridView gridView = null;                foreach (Control control in this.Form.Controls)
                    {
                        if (control is GridView)
                        {
                            gridView = (GridView)control;
                        }
                    }                if (gridView != null)
                    {
                        BindGrid(gridView, false);
                        
                    }        }
            public void GetVisible()
            {
               
                _navigationControl.ButtonDeleteVisible = false;
                _navigationControl.ButtonFirstVisible = false;
                _navigationControl.ButtonLastVisible = false;
                _navigationControl.ButtonModifyVisible = false;
                _navigationControl.ButtonNextVisible = false;
                _navigationControl.ButtonPreviousVisible = false;
                _navigationControl.ButtonFirstVisible = false;
                _navigationControl.TextBoxRecordCountVisible = false;
                _navigationControl.TextBoxStatusVisible = false;
                _navigationControl.DropDownListCurrentRowVisible = false;
               
            }
            #endregion
             
           
            public override void GetData()
            {
                base.GetData();
                System.Web.UI.WebControls.GridView gridView = null;            foreach (Control control in this.Form.Controls)
                {
                    if (control is GridView)
                    {
                        gridView = (GridView)control;
                    }
                }            if (gridView != null)
                {
                  //BindGrid(gridView, false);
                    gridView.PageIndexChanging += new System.Web.UI.WebControls.GridViewPageEventHandler(this.gridView_PageIndexChanging);
                    gridView.RowEditing += new System.Web.UI.WebControls.GridViewEditEventHandler(this.gridView_RowEditing);
                    gridView.RowDeleting += new System.Web.UI.WebControls.GridViewDeleteEventHandler(gridView_RowDeleting);
                    gridView.RowCancelingEdit += new System.Web.UI.WebControls.GridViewCancelEditEventHandler(gridView_RowCancelingEdit);
                    gridView.RowUpdating += new System.Web.UI.WebControls.GridViewUpdateEventHandler(gridView_RowUpdating);
                    
                }        }
            private void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                System.Web.UI.WebControls.GridView gridView = null;
                gridView = (GridView)sender;
                if (gridView == null)
                    return;
                gridView.PageIndex = e.NewPageIndex ;
                BindGrid(gridView, true);
     
            }
            private void BindGrid(object sender,bool bPaging)
            {
                System.Web.UI.WebControls.GridView gridView = null;
                gridView = (GridView)sender;
               
                gridView.DataSource = DataTable ;
                if (!bPaging)
                {
                    gridView.PageIndex  = 0;
                }
                gridView.DataBind();        }
      

  5.   

    问题就出在你的Load函数中了
     if   (gridView   !=   null) 

     BindGrid(gridView,   false); 
                                            
     } 
    这句每次提交都会执行,所以你的GridView一直是在PageIndex=0上
      

  6.   

    kuya 能说说具体怎么修改吗
      

  7.   

    把这句
     if       (gridView       !=       null)   
    {   
      BindGrid(gridView,       false);   
                                                                                    
      }   加在if(!IsPostBack)
    {
     if       (gridView       !=       null)   
    {   
      BindGrid(gridView,       false);   
                                                                                    
      }   
    }
    试试吧,感觉你写的太乱了,没必要写的这么复杂。
    可以写的简单些
    private DataTable GetData()
    {
      ....//你的数据
    }
    protected   override   void   Page_Load(object   sender,   EventArgs   e) 
    {
      if(!IsPostBack)
    {
      gridview.datasource = GetData();
      gridview.databind();
    }
    }
    private   void   gridView_PageIndexChanging(object   sender,   GridViewPageEventArgs   e) 
    {
      gridview.pageindex=e.newpageindex;
      gridview.datasource = GetData();
      gridview.databind();
    }
    private   void   gridView_RowDeleting(object   sender,   GridViewDeleteEventArgs   e) 

      gridview.datasource = GetData();
      gridview.databind();
                            for   (int   i   =   0;   i   <   DeleteCommand.Parameters.Count;   i++) 
                            { 
                                      DeleteCommand.Parameters[i].Value   =   gridView.DataKeys[e.RowIndex].Values[DeleteCommand.Parameters[i].SourceColumn];                                                                   
                            } 
    DeleteCommand.ExecuteNonQuery(); 
    gridview.datasource = GetData();
      gridview.databind();
                          

      

  8.   

    并不是我要写这么复杂,而是想把这个当成一个底层,其他页面调用的时候只要绑定要显示的字段就可以了,如果是单纯的.aspx页面的CODE那就简单了
      

  9.   

    所以 kuya 给的代码不合适