不是,我没仔细看你的错误提示,看了后我想起来我在去年(2002年)做的一个项目时遇到了类似的错误提示,其实可以说是一模一样,错的莫名其妙,当时的情况是这样的,用DADAGRID控件浏览从数据库中查询的结果,然后如果双击任一条记录,就弹出编辑窗口进行数据编辑,但是奇怪的现象发生了,当用鼠标双击GIRD控件两条记录之间的中线时,可能只有我会这么测试,“Invalid CurrentPageIndex value. It must be >= 0 and < the PageCount. ”的错误提示产生了,当时想破了脑袋也解决不了,后来发现当记录中存在NULL字段时就会出现这种情况,我 不知道到这是不是微软产品的一个BUG,后来我的解决方法如下: if(pobjDataSet.Tables[pstrTableName].Columns[i].DataType==System.Type.GetType("System.String")) { for(j=0;j<pobjDataSet.Tables[pstrTableName].Rows.Count;j++) { pobjDataSet.Tables[pstrTableName].Rows[j][i]=pobjDataSet.Tables[pstrTableName].Rows[j][i]+" "; } } 很无奈的一段代码,解释一下,就是发现某列类型是字符型就在所有该列中加一个空格, 这可能对你目前的情况或多或少有些借鉴意义,另外,我是真心的帮你想办法,不是出你的 洋相,我虽然只有一个绿星,但是我已经搞开发十年了,只是不常到CSDN来而以!
try
{
MyDataGrid.DataBind();
}
catch (HttpException ex)
{
if(ex.GetHttpCode().ToString()=="500")
{
MyDataGrid.CurrentPageIndex = 0;
MyDataGrid.DataBind();
}
}
{
this.DataGrid1.VirtualItemCount = (new InfoSystem ()).GetArticlesCountByCid(cid);
this.DataGrid1.PageSize = rows;
ListData ld = (new InfoSystem()).GetArticlesByCid(cid,rows,pages);
this.DataGrid1.DataSource = ld.Tables[0].DefaultView;
this.DataGrid1.CurrentPageIndex = pages - 1;
this.DataGrid1.DataBind();
}这是绑定函数.this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
pages = Convert.ToInt32(this.DataGrid1.CurrentPageIndex) + 1;
BindGrid();
这是翻页函数.
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
int iMaxPage=DataTable.Rows.Count/this.DataGrid1.PageSize;
int i=DataTable.Rows.Count%this.DataGrid1.PageSize;
if(i!=0)
{
iMaxPage++;
}
if(iMaxPage-1<e.NewPageIndex)
{
this.DataGrid1.CurrentPageIndex=iMaxPage-1;
}
else
{
this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
}
this.DataGrid1.DataSource=DataTable;
this.DataGrid1.DataBind();
}
pages = Convert.ToInt32(this.DataGrid1.CurrentPageIndex) + 1
你并没有判断DataGrid有多少页绑定了,这可能会溢出
我刚才仔细的高度了N遍,各个步骤的变量值都正确,只有当运行到this.DataGrid1.DataBind();这句时就触发异常实在无奈.
pages这个只是用来在存储过程里查询是第几页时用到的参数。且这个值是正确的。
你从没有判断是否pages大于总页数
if(pobjDataSet.Tables[pstrTableName].Columns[i].DataType==System.Type.GetType("System.String"))
{
for(j=0;j<pobjDataSet.Tables[pstrTableName].Rows.Count;j++)
{
pobjDataSet.Tables[pstrTableName].Rows[j][i]=pobjDataSet.Tables[pstrTableName].Rows[j][i]+" ";
}
}
很无奈的一段代码,解释一下,就是发现某列类型是字符型就在所有该列中加一个空格,
这可能对你目前的情况或多或少有些借鉴意义,另外,我是真心的帮你想办法,不是出你的
洋相,我虽然只有一个绿星,但是我已经搞开发十年了,只是不常到CSDN来而以!
上述错误居然属于不可捕获错误!
加入这一行
HttpContext.Current.Response.Write("<script>window.alert('"+ currentPageIndex +"');</script>");看看每次分页时,currentPageIndex 对不对??我想是你的 currentPageIndex 问题,有时你不点击分页按钮,其实也会触发Datagrid_PageIndexChanged 事件,
try{
DataGrid1.DataBind();
}
catch{
DataGrid1.CurrentPageIndex = -1;
DataGrid1.DataBind();
}