DataGrid中删除分页最后一条记录时PageIndex错误的解决方法

    
    我们的DataGrid完成后。编译和执行页,会看到一切都很顺利。不过,当跳转到最后一个页,开始删除页上的所有记录,删除到当页最后一行后,注意会发生什么。应该产生一个PageIndex错误。 
    解决的方法很简单! 
    首先,你需要知道在最后一页上有多少数据项。为此,需要对Item Count和Page Size使用Mod(取模)运算符。由于Mod运算符返回的只是余数,所以绝对不会有任何多余的数据需要处理。如果页上只余一项,那么占位符变量Result就等于1。
    由于DataGrid的CurrentPageIndex属性是一个从0开始的索引,而PageCount属性从1开始,所以必须从页计数上减2(而不是1),才能在删除之后回退一页。

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Web; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls; 
 
namespace XH3 
 
public class XH : System.Web.UI.Page 
    
{
    
protected System.Web.UI.WebControls.DataGrid dgrd; 
    
//我封装的数据库操作类,以下为引用语句 
    protected Config conn = new Config(); 
    
private void Page_Load(object sender, System.EventArgs e) 
        
{              
        
//数据绑定                 
           DataBinds();              
        }
 
    Web 窗体设计器生成的代码
Web 窗体设计器生成的代码 
 
    
private void dgrd_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) 
        {    
        
//删除按扭 
            if(e.CommandName =="Delete"
            
{                   
                
//在分页状态下删除DATAGRID中的记录需要转换CurrentPageIndex值 
                
//以避免当result值为1时出错 
                int result=dgrd.Items.Count%dgrd.PageSize; 
                
if (result==1
                
{dgrd.CurrentPageIndex = (dgrd.PageCount - 2);}                 
                 
                
//读取该表主键字段 
                string rowToDelete1 = e.Item.Cells[1].Text; 
                
string rowToDelete2 = e.Item.Cells[2].Text; 
                
//从数据库中删除 
                string str="DELETE FROM DB where DB_1="+"'"+rowToDelete1+"'"+" and DB_2="+"'"+rowToDelete2+"'"+""
                conn.ExecuteNonQuery (str); 
                
//重新绑定数据 
                DataBinds();                 
            }

    }
 
    
/// <summary> 
        
/// 数据绑定 
        
/// </summary> 

        private void DataBinds() 
        
{   //检索数据库 
            string strSql="SELECT * FROM DB"
            
//得到数据集 
            dgrd.DataSource=conn.GetDs(strSql).Tables[0].DefaultView;   
            dgrd.DataBind(); 
        }
 
    
/// <summary> 
        
/// 翻页功能 
        
/// </summary> 

        private void dgrd_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) 
        

            dgrd.CurrentPageIndex 
=e.NewPageIndex ; 
            dgrd.DataBind ();         
        }
         
    }
 

 
 
 



    

posted on 2005-03-26 21:47  xh3  阅读(750)  评论(10编辑  收藏  举报

导航