关于DataGrid中分页显示出错的问题,无效的 CurrentPageIndex 值

langmafeng 2005-03-28 02:54:21
我已经重载了DataGrid的DataBind方法:
public override void DataBind()
{
if (this.DataSource == null)
return;

DataTable dt = (DataTable)this.DataSource;

if (dt.Rows.Count <= this.CurrentPageIndex * this.PageSize)
{
this.CurrentPageIndex = 0;
}

base.DataBind ();
}

当DataGrid列是动态绑定的时候没有问题
但当DataGrid列是在aspx文件中绑定时,如果DataGrid当前显示的不是第一页,再执行一个没有记录的查询,系统就出错,提示“无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。”,但我在调试的时候发现CurrentPageIndex的值就是0,但ViewState["CurrentPageIndex"]的值还是1,后来加上了
if (this.ViewState["CurrentPageIndex"] != null)
this.ViewState["CurrentPageIndex"] = 0;
之后还是出错,调试时发现ViewState["CurrentPageIndex"]的值也已经变成了0,但就是依然报一样的错!百思不得其解,请哪位朋友帮忙看看,谢谢!
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nnh 2005-03-29
  • 打赏
  • 举报
回复
Try
BindGrid()
Catch
MyDataGrid.CurrentPageIndex = MyDataGrid.PageCount - 1
BindGrid()
End Try
langmafeng 2005-03-29
  • 打赏
  • 举报
回复
谢谢楼上各位朋友,问题解决了,原因出自我重载了DataGrid的其他的方法中的问题
hedonister 2005-03-28
  • 打赏
  • 举报
回复
敢问楼主搞定了吗?
littlekeen 2005-03-28
  • 打赏
  • 举报
回复
楼上的差不多了.
hedonister 2005-03-28
  • 打赏
  • 举报
回复
给你段完整的代码,你看一下思路,注意我里头很多逻辑处理在别的类,你只能看看思路了,基本能解决你的问题了,实在不行再短信通知,ok?

//绑定数据信息
private void BindDocInfo()
{
DataTable dt = ucMyDoc.GetDocuments();

if (dt == null)
{
this.lErrorMessage.Visible = true;
this.lErrorMessage.Text = ucMyDoc.Message;
return;
}

//处理分页条件下的删除
int iCount = dt.Rows.Count;

int iCurrentPage = dgDocument.CurrentPageIndex;
int iCNum = dgDocument.PageCount;
int iCPageNum = dgDocument.PageSize;

//判断是否为最后页的记录
if ((iCurrentPage+1) == iCNum && iCount%iCPageNum == 0)
{
if (iCurrentPage > 0)
{
dgDocument.CurrentPageIndex = iCurrentPage - 1;
}
else
{
dgDocument.CurrentPageIndex = 0;
}
}

dgDocument.DataSource = dt;

dgDocument.DataBind();
}

//翻页
private void dgDocument_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
dgDocument.CurrentPageIndex = e.NewPageIndex;
BindDocInfo();
}

//删除单条记录
private void dgDocument_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int iDocId = Convert.ToInt32(dgDocument.DataKeys[e.Item.ItemIndex]);

int[] iArrayDocId = {iDocId};
int iEffectRows = ucMyDoc.DeleteDocument(iArrayDocId);

if (iEffectRows == 0)
{
this.lErrorMessage.Visible = true;
this.lErrorMessage.Text = ucMyDoc.Message;
}

BindDocInfo();
}

//删除所有选中记录
private void btnDelete_Click(object sender, System.EventArgs e)
{
CheckBox cb = new CheckBox();
int[] iArrayDocId = new int[15];

int iIndex = 0;
foreach(DataGridItem item in dgDocument.Items)
{
cb = (CheckBox)item.Cells[0].Controls[1];

if(cb.Checked == true)
{
iArrayDocId[iIndex] = Convert.ToInt32(dgDocument.DataKeys[item.ItemIndex]);
iIndex ++;
}
}

if (iIndex == 0)
{
Page.RegisterStartupScript("","<script>alert('请选择要删除的模板信息!')</script>");
return;
}

int iEffectRows = ucMyDoc.DeleteDocument(iArrayDocId);

if (iEffectRows == 0)
{
this.lErrorMessage.Visible = true;
this.lErrorMessage.Text = ucMyDoc.Message;
}

BindDocInfo();
}
langmafeng 2005-03-28
  • 打赏
  • 举报
回复
我在base.DataBind ();行设断点监视到的CurrentPageIndex 的值是0
hedonister 2005-03-28
  • 打赏
  • 举报
回复
特别是在删除时当最后页只有一条记录时,要注意处理这个问题
hedonister 2005-03-28
  • 打赏
  • 举报
回复
肯定不是0的问题,你设个断点跟踪下看,是在DataBind()前的CurrentPageIndex 是之前绑定时的,不是后来的,明白?
langmafeng 2005-03-28
  • 打赏
  • 举报
回复
To 楼上:
问题不在如何判断上面,其实CurrentPageIndex 的值我已经设对了,就是搞不清楚是什么原因导致在CurrentPageIndex 为0的情况下DataGrid依然报错
hedonister 2005-03-28
  • 打赏
  • 举报
回复
看看这段比较笨的办法

int iCount = dt.Rows.Count;
int iCurrentPage = dgDocument.CurrentPageIndex;
int iCNum = dgDocument.PageCount;
int iCPageNum = dgDocument.PageSize;

//判断是否为最后页的记录
if ((iCurrentPage+1) == iCNum && iCount%iCPageNum == 0)
{
if (iCurrentPage > 0)
{
dgDocument.CurrentPageIndex = iCurrentPage - 1;
}
else
{
dgDocument.CurrentPageIndex = 0;
}
}
dgDocument.DataSource = dt;
dgDocument.DataBind();
baobei7758 2005-03-28
  • 打赏
  • 举报
回复
up

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧