我有一个datagrid,可以删除一行(使用ajax)。我在以下场景中遇到了寻呼机问题:
让我说我的PageSize是10,我有101行,所以这是11页,最后一页有一个元素。不要假设我在第10页(PageIndex = 9)并删除一行。然后我去了第11页(谁现在是空的,并不存在)。 ASP现在向我显示EmptyDataTemplate,没有寻呼机,所以我不能回去。
我的方法(不起作用)是检测这种情况并退一步:
public void Bind()
{
gridMain.DataBind();
}
public void SetPage(int page)
{
gridMain.PageIndex = page;
gridMain.DataBind();
}
protected void ldsGridMain_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
selectArgs = e;
e.Result = (new EnquiryListController()).GetEnquiryList(OnBind(this), supplier);
}
protected void ldsGridMain_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
totalRows = selectArgs.Arguments.TotalRowCount;
//Detect if we need to update the page:
if (gridMain.PageIndex > 0 && (gridMain.PageSize * gridMain.PageIndex + 1) > totalRows) SetPage(gridMain.PageIndex - 1);
}
protected void gridMain_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
SetPage(e.NewPageIndex);
}
我可以看到使用右页索引调用了SetPage,但似乎没有调用数据绑定,因为我仍然得到EmptyDataTemplate。
答案 0 :(得分:3)
删除项目时,需要重新绑定数据,以便寻呼机调整大小 不只是调用数据绑定,您必须重置数据源并调用数据绑定。它不会将数据保存在回发之间的数据源中。
在此之前,请确保将pageIndex重置为新集合中的范围。
答案 1 :(得分:0)
SetPage(gridMain.PageIndex - 1)可能不正确。您必须计算当前行计数的最后一页。当前PageIndex-1可能超出范围。
答案 2 :(得分:0)
使用更新的数据源重新绑定SetPage中的网格并设置pageindex。检查RecordCount / PageSize是否小于寻呼机或当前页面索引中的NumberofPages,然后根据RecordCount / PageSize减少页面索引。
答案 3 :(得分:0)
你不能只使用:
public void SetPage(int page)
{
gridMain.PageIndex = Math.Max(page, gridMain.PageCount);
gridMain.DataBind();
}