`

无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount

 
阅读更多
(转)前些日子在公司的一个项目中,要用到DataGrid自带的删除功能,并且实现分页,原以为很简单的,但却偏偏困扰了我们组的所有人!每当删除一条记录后要退回到前一页时,便出现了“无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。”错误。单步调试并跟踪进去,方才发现,问题出在了DataGrid.DataBind();的时候。我调了一下DataBind()之前的DataGrid数据源状态,发现DataGrid.CurrentPageIndex还是删除前的,这是出错的主要原因!针对这个错误,可以有如下的解决方案:

思路:
当删除数据库中数据并在数据绑定之前,判断是否需要翻页,以纠正CurrentPageIndex的错误。

实现:
在DataGrid_Delete方法中,添加如下代码:

//正常删除数据库中的数据
。。。。。。

//判断
if( DataGrid1.Items.Count == 1 && DataGrid1.CurrentPageIndex > 0 )
{
DataGrid1.CurrentPageIndex--;
}

//重新绑定数据
BindGrid();

情况二(变种):
可能我们没有使用DataGrid内建的删除方式,可能通过CheckBox使得每次可以删除多条记录。

思路:
其实思路差不多,只不过要获取一次一共删除多少记录,并保存于一个变量中,然后将DataGrid1.Items.Count和其比较,正如上面的“DataGrid1.Items.Count == 1”,这样就能判断是否需要翻页了。

实现:
//获取删除记录的总数
intcount = 0;
foreach( DataGridItem item in DataGrid1.Items )
{
if( item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem )
{
CheckBox ckbox = item.FindControl(“CheckBox1“ ) as CheckBox;
if( ckbox != null && ckbox.Checked )
++ count;
}
}

//判断
if( count == DataGrid1.Items.Count && DataGrid1.CurrentPageIndex > 0 )
{
-- DataGrid1.CurrentPageIndex;
}

//重新绑定数据
BindGrid();


情况三(变种):
在我们的一个Page中,可能是根据某一条件进行筛选,然后再显示在DataGrid内。当DataGrid允许分页,也会出现类似的问题。即:当某一个条件筛选出的结果大于1页,并且我们浏览到第2,或更后面的页,然后我们改变筛选的参数,重新获取结果并填充DataGrid,那么该错误提示又将出现!

思路:
思路就是,在改变筛选条件,进行筛选之前,我们应该判断CurrentPageIndex是否为第一页,即CurrentPageIndex应该等于0。如果不是则将其设置为0。

实现:
我们用一个DropDownList来实现筛选,在SelectedIndexChanged事件处理函数中,我们原来是这么写的:

private void lstProject_SelectedIndexChanged(object sender, System.EventArgs e)
{
ShowData( lstProject.SelectedValue );
}

现在应该改为:
private void lstProject_SelectedIndexChanged(object sender, System.EventArgs e)
{
if( viewAllWorkItem.CurrentPageIndex > 0 )
{
viewAllWorkItem.CurrentPageIndex = 0;
}
ShowData( lstProject.SelectedValue );
}

分享到:
评论

相关推荐

    datagridview 分页

    int pagecount = 0; if (recordcount % page_size == 0) pagecount = recordcount / page_size; else pagecount = (recordcount / page_size) + 1; return pagecount; } /**//// /// 获取分页数据 /// ...

    ASP.NET常用代码

    [1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1...

    Repeater分页显示

    if (pds.CurrentPageIndex == pds.PageCount-1) { this.lbtnNextPage.Enabled = false; this.lbtnDownPage.Enabled = false; } Repeater1.DataBind(); } protected void lbtnpritPage_Click(object sender, ...

    asp.net分页控件样式

    每页%PageSize%条 第%CurrentPageIndex%页 共%PageCount%页 共%RecordCount%条" CustomInfoTextAlign="left" HorizontalAlign="Left" LayoutType="Table" PagingButtonSpacing="8px" ShowCustomInfoSection="Right...

    ASP.NET程序中常用的三十三种代码.txt

     myDeleteButton = (LinkButton)myTableCell.Controls[0];  myDeleteButton.Attributes.Add("onclick","return confirm(’您是否确定要删除这条信息’);");  break;  default:  break;  } }  5.点击表格行...

    日期控件和分页控件

    转Áa" ShowCustomInfoSection="Left" Width="100%" CustomInfoHTML="第̨²%CurrentPageIndex%页°3,ê?共2%PageCount%页°3,ê?第̨²页°3显?示º?%PageSize%条¬?" PageIndexBoxStyle="width:50px" ...

    服务器控件分页

    pds.CurrentPageIndex = PageNow - 1;//取得当前页的页码 First.Enabled = true; Front.Enabled = true; Next.Enabled = true; Last.Enabled = true; if (PageNow == 1) { First.Enabled = false; Front....

    AspNetPager控件的最基本用法

    它弥补了GridView内置分页以及PageDatasource类辅助分页的不足,将分页数据逻辑和页面UI分离开来,非常有利于SQL分页的实现。下面仅举一个最基本的用法,帮助初学者入门。 到AspNetPage官方网站相应页面下载控件:...

    登陆界面和一些小技术

    ps.CurrentPageIndex = cup - 1; if (!IsPostBack) { //判断页面是否第一次载入 for (int i = 1; i <= ps.PageCount; i++) { //循环出页码 pageddl.Items.Add(i.ToString()); } } //下面主要是控制上下...

    AspNetPager示例源码

    修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能;...

    AspNetPager分页控件UrlRewritePattern参数设置的重写代码

    AspNet:AspNetPager ID=”AspPages” runat=”server” CustomInfoHTML=”第%CurrentPageIndex%/%PageCount%页,每页%PageSize%条,共%RecordCount%条” FirstPageText=”首页” LastPageText=”尾页” ...

    SimPager Flex分页组件

    currentPageIndex//当前页 pageSize//每页记录数 buttonConut//显示的(数字)按钮个数 normalButtonStyleName//普通按钮样式 selectedStyleName//被选中按钮样式 firstLabel第一页显示的文字 prevLabel上页显示的...

    asp.net基于XML的留言板

    ps.CurrentPageIndex = curpage - 1; //取得当前页的页码 lnkbtnPrve.Enabled = true; lnkbtnTop.Enabled = true; lnkbtnNext.Enabled = true; lnkbtnLast.Enabled = true; if (curpage == 1) { lnkbtnTop....

    ASP.Net皮肤换肤控件

    修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能;...

    Repeater控件与PagedDataSource结合实现分页功能

    本文讲解Repeater控件与PagedDataSource相结合实现其分页功能。PagedDataSource 类封装那些允许数据源控件(如 DataGrid、GridView)执行分页操作的属性。... CurrentPageIndex // 获取或设置当前页的索引。 DataSource

    AspNetPager控件及Demo源码 v7.4.4.rar

    修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能;...

    AspNetPager示例源码学习 7.2

    修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能;...

    AspNetPager7.2分页控件及Demo源码

    修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能;...

    AspNetPager控件及Demo源码 v7.4.4.zip

    修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能;...

Global site tag (gtag.js) - Google Analytics