ASP.NET:删除行时的分页

时间:2009-09-29 12:14:16

标签: c# asp.net gridview

我有一个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。

4 个答案:

答案 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();
}