Beyond the dream——飛雪飄寒
————磨難不過是人生鍵盤的回車。。。。。。
posts - 73, comments - 217, trackbacks - 26, articles - -1
博客园
::
首页
:: ::
联系
::
订阅
::
管理
.Net中“无效的CurrentPageIndex值。它必须大于等于0且小于PageCount”错误的解决方法
Posted on 2008-05-30 11:21
飛雪飄寒
阅读(364)
评论(0)
编辑
收藏
所属分类:
ASP.NET
、
学习总结
前几天在公司的一个项目中,用到了DataGrid的绑定及分页功能,比如有10页,当不在首页(如第2页)根据条件进行筛选并查不到结果时往往会出现“
无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。
”的错误;之前在DataGrid自带的删除功能,并且实现分页时,每当删除一条记录后要退回到前一页时,也出现了“
无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。
”的错误。
现本人将此错误的出现情况及解决方法进行了总结(个人方法仅供参与考,不当之处敬请指正),具体如下:
情况一:
当在DataGrid自带的删除功能,并且实现分页时,每当删除一条记录后要退回到前一页时
思路:
当删除数据库中数据并在数据绑定之前,判断是否需要翻页,以纠正CurrentPageIndex的错误。
实现:
在DataGrid_Delete方法中,添加如下代码:
//正常删除数据库中的数据
//判断
if( DataGrid1.Items.Count == 1 && DataGrid1.CurrentPageIndex > 0 )
{
DataGrid1.CurrentPageIndex--;
}
//重新绑定数据
BindGrid();
情况二:
可能我们没有使用DataGrid内建的删除方式,可能通过CheckBox使得每次可以删除多条记录。
思路:
其实思路差不多,只不过要获取一次一共删除多少记录,并保存于一个变量中,然后将DataGrid1.Items.Count和其比较,正如上面的“
DataGrid1.Items.Count == 1
”,这样就能判断是否需要翻页了。
实现:
//获取删除记录的总数
int count = 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 );
}
Example:
Example Code
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
VoteInfo
{
/**/
///
<summary>
///
QueryVoteInfo 的摘要说明。
///
</summary>
public
class
QueryVoteInfo : System.Web.UI.Page
{
protected
System.Web.UI.WebControls.Label LblType;
protected
System.Web.UI.WebControls.DropDownList DDLType;
protected
System.Web.UI.WebControls.Label LblName;
protected
System.Web.UI.WebControls.TextBox TxtName;
protected
System.Web.UI.WebControls.Button BtnQuery;
protected
System.Web.UI.WebControls.DataGrid dgVoteInfo;
private
DataAccess da
=
new
DataAccess();
protected
void
Page_Load(
object
sender, System.EventArgs e)
{
//
在此处放置用户代码以初始化页面
if
(Session[
"
State
"
]
==
null
||
Session[
"
State
"
].ToString()
!=
"
right
"
)
{
Response.Redirect(
"
Login.aspx
"
);
}
if
(
!
IsPostBack)
{
this
.dgDataBind();
}
}
Web 窗体设计器生成的代码
#region
Web 窗体设计器生成的代码
override
protected
void
OnInit(EventArgs e)
{
//
//
CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base
.OnInit(e);
}
/**/
///
<summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
{
this
.BtnQuery.Click
+=
new
System.EventHandler(
this
.BtnQuery_Click);
this
.dgVoteInfo.PageIndexChanged
+=
new
System.Web.UI.WebControls.DataGridPageChangedEventHandler(
this
.dgVoteInfo_PageIndexChanged);
this
.Load
+=
new
System.EventHandler(
this
.Page_Load);
}
#endregion
private
string
QuerySql()
{
string
sql
=
"
select * from CadreInfo where 1=1
"
;
if
(
this
.TxtName.Text.Trim()
!=
""
)
{
sql
+=
"
and Name like '%
"
+
this
.TxtName.Text.Trim()
+
"
%'
"
;
}
if
(
this
.DDLType.SelectedItem.Text.Trim()
!=
""
)
{
sql
+=
"
and Type='
"
+
this
.DDLType.SelectedItem.Text.Trim()
+
"
'
"
;
}
return
sql;
}
private
void
dgDataBind()
{
try
{
string
sql
=
this
.QuerySql();
DataTable dt
=
new
DataTable();
dt
=
da.ExecuteDataTable(sql);
this
.dgVoteInfo.DataSource
=
dt;
this
.dgVoteInfo.DataBind();
}
catch
{}
}
protected
void
BtnQuery_Click(
object
sender, System.EventArgs e)
{
if
(dgVoteInfo.CurrentPageIndex
>
0
)
{
dgVoteInfo.CurrentPageIndex
=
0
;
}
this
.dgDataBind();
}
protected
void
dgVoteInfo_PageIndexChanged(
object
source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
this
.dgDataBind();
if
(e.NewPageIndex
>=
dgVoteInfo.PageCount)
{
dgVoteInfo.CurrentPageIndex
=
0
;
}
else
{
dgVoteInfo.CurrentPageIndex
=
e.NewPageIndex;
}
this
.dgVoteInfo.DataBind();
}
}
}
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-10-06 14:37 编辑过
相关文章:
MSN Messenger 无法登陆的另类解决方法
MSN Messenger 不能登录的解决方案"0x81000370错误"
相关链接:
所属分类的其他文章:
.net实现工作日的计算
.net实现生成及打印条形码功能
.net 操作XML小结
DataTable使用技巧总结
学习asp.net比较完整的流程
asp.net删除文件夹里的所有文件
Server.MapPath的用法
.net使用DotNetCharting控件生成报表统计图总结
常用正则表达式总结
.net导出word、excel等文件操作类
最新IT新闻:
YouTube探索新赢利模式 开始售音乐、视频游戏
英特尔Core i7将继续称王 性能提52%
微软已经放弃Windows Vista?
Microsoft Live Search 现在嵌入在Facebook中
Mono 2.0 发布 Linux 上的 .NET 框架成熟了吗?
Powered by:
博客园
Copyright © 飛雪飄寒
日历
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
做事
在于方法
就像
生活
只要找寻到
一个
可以廷展的支点
让人承认
然后
走下去
走直
与我互动
给我发短消息
搜索
留言簿
给我留言
查看私人留言
随笔分类
(127)
ASP.NET(22)
C#(13)
Javascript(7)
SQL(5)
UML(1)
XML(1)
人生杂谈(13)
心情随笔(16)
学习总结(39)
资源共享(10)
随笔档案
(72)
2008年9月 (6)
2008年8月 (4)
2008年7月 (10)
2008年6月 (6)
2008年5月 (1)
2008年4月 (3)
2008年3月 (5)
2008年2月 (4)
2008年1月 (4)
2007年12月 (1)
2007年11月 (1)
2007年6月 (2)
2007年5月 (2)
2007年4月 (4)
2007年3月 (5)
2006年11月 (4)
2006年10月 (3)
2006年9月 (1)
2006年8月 (5)
2006年7月 (1)
相册
东方
交大时光
深圳聚会
收藏夹
(4)
转载(4)
Blog Collection
anytao
cnblogs-Top10
dudu
jillzhang
LoveCherry
鸟食轩
天道酬勤
天轰穿
Friends
葛长青
李海良
刘云
唐银艳
王璨
钟展锋
Study OnLine
《博客园精华集》
ASP.NET2.0数据指南
C#设计模式系列文章
NHibernate
XML DOM
XML学习
反射学习系列
积分与排名
积分 - 39411
排名 - 1094
最新评论
1. re: asp.net删除文件夹里的所有文件
@hhhh63 关于生成统计图无法自动删除的问题。每次生成统计图,都会生成一个图片,那么将会生成大量的无用的图片。这时就要手动删除这些文件了,包括不在TempDirectory设置文件夹里的No D...
--飛雪飄寒
2. re: DotnetCharting控件的破解方法
有没有破解过winforms 5.1 版本的啊
能不能帮忙破解一下啊,现在急用
谢谢,,
--持之以恒
3. re: .net使用DotNetCharting控件生成报表统计图总结
如果使用柱状图,怎么控制列的宽度,不至于在只用很少列时,使整个图都被这几列填满?
--古道
4. re: asp.net删除文件夹里的所有文件
@足够有晋 图形的左上方和图形的下面都隐含了超链接,鼠标移动到这两个区域后,点击都会链接到,方法可参照DotnetCharting控件各版本破解方法:...
--飛雪飄寒
5. re: .net使用DotNetCharting控件生成报表统计图总结
@Gread
生成的图片带超链接导向官网的问题已解决,方法可参照DotnetCharting控件各版本破解方法:
--飛雪飄寒
6. re: .net实现生成及打印条形码功能
能不能把 FLX.WebControls.dll 发一份给我
我的mail:yangchun1216@yeah.net
--古道轻风
7. re: .net实现工作日的计算
@中华小鹰 谢谢你的建议,你说的没错,我之前的思路和你一样,但在编写代码过程中发现这样计算起来比较麻烦,而用我现在的思路计算起来很简单,思路也非常清晰明了,还有一个更重要的原因是表ConfigDate...
--飛雪飄寒
8. re: .net实现工作日的计算
楼主的这个思路好像差了点,每数一天都得在ConfigDate里面查。这样你的总时间复杂度就是O(n2)的了。 你何不存几条规则呢,比如: abstract class Rule { publ...
--中华小鹰
9. re: asp.net删除文件夹里的所有文件
好的,我再找找。感谢楼主的回复。
--足够有晋
10. re: asp.net删除文件夹里的所有文件
@足够有晋
这和破解版本有关,到网上去找一个好一点的破解版本应该可以解决这个问题,我有时间也去找一下,再把它共享出来吧!
--飛雪飄寒
阅读排行榜
1. 考虑性能的设计与开发——性能设计 (2580)
2. .net使用DotNetCharting控件生成报表统计图总结 (2578)
3. Sql server一些常见性能问题的总结(1907)
4. .net调用OWC生成报表统计图总结(1730)
5. 提高MySQL 数据库性能的思路(1688)
6. 求“javascript调用Webservice”所遇问题的解答!(1394)
7. Apache Tomcat 5.5部署jsp项目总结之——发布JSP应用程序(1163)
8. 好书免费下载(1112)
9. .net实现工作日的计算(1089)
10. Apache Tomcat 5.5部署jsp项目总结之——基本配置(1009)
评论排行榜
1. .net使用DotNetCharting控件生成报表统计图总结 (61)
2. Sql server一些常见性能问题的总结(16)
3. 求“javascript调用Webservice”所遇问题的解答!(14)
4. 视频教材下载信息(11)
5. 提高MySQL 数据库性能的思路(10)
6. .net调用OWC生成报表统计图总结(9)
7. .net实现导出Word、Excel格式文件(8)
8. asp.net删除文件夹里的所有文件(8)
9. .net 操作XML小结(5)
10. 快樂生活!!!(5)