C# ASP.NET:删除行时分页
我有一个datagrid,可以在其中删除一行(使用ajax)。在以下情况下,我无法使用寻呼机: 假设我的页面大小是10,我有101行,这是11页,最后一页只有一个元素。不要假设我在第10页(PageIndex=9)删除了一行。然后我转到第11页(他现在是空的,实际上并不存在)。ASP现在向我显示EmptyDataTemplate和无寻呼机,因此我无法返回 我的方法(不起作用)是检测此场景并后退一页:C# ASP.NET:删除行时分页,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个datagrid,可以在其中删除一行(使用ajax)。在以下情况下,我无法使用寻呼机: 假设我的页面大小是10,我有101行,这是11页,最后一页只有一个元素。不要假设我在第10页(PageIndex=9)删除了一行。然后我转到第11页(他现在是空的,实际上并不存在)。ASP现在向我显示EmptyDataTemplate和无寻呼机,因此我无法返回 我的方法(不起作用)是检测此场景并后退一页: public void Bind() { gridMain.DataBind(); }
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是用正确的页面索引调用的,但databind似乎并没有被调用,因为我仍然得到EmptyDataTemplate。SetPage(gridMain.PageIndex-1)可能不正确。您必须计算当前行数的最后一页是多少。当前页面索引-1可能超出范围。删除该项目时,需要重新绑定数据,以便调整页面大小。
不仅要调用databind,还必须重置数据源并调用databind。它不会在回发之间保留数据源中的数据
执行此操作之前,请确保将pageIndex重置为新集合范围内的一个。使用更新的数据源重新绑定SetPage中的网格并设置pageIndex。检查RecordCount/PageSize是否小于pager或当前页面索引中的NumberofPages,然后根据RecordCount/PageSize减少页面索引。您不能只使用以下内容:
public void SetPage(int page)
{
gridMain.PageIndex = Math.Max(page, gridMain.PageCount);
gridMain.DataBind();
}
我没有得到任何异常,所以我不认为是这样。没有得到异常并不意味着你已经测试了所有的场景。我刚刚发现,当PageIndex-1超出范围时,这段代码可能会导致异常。此外,PageSize*PageIndex+1也可能不正确:PageSize=10,PageIndex=2(第三页),10*2+1=21,而不是您预期的30。PageSize*PageIndex+1实际上是我想要的,因为我想与totalRows进行比较。如果PageSize*PageIndex+1大于totalRows,我知道我有一个没有任何行的页面。需要返回一个页面(最多只能返回一个页面,因为最后一个页面上最多需要一个元素才能存在。)问题在于最后一个DataBind()没有任何效果。我不能使用ajax.asp.net内置控件“删除”元素,ajax并不总是很好,你可能不得不使用我最鄙视的东西,一个更新面板,来实现两个世界的最佳结合。您也可以只使用jqGrid或其他一些客户端分页网格,并在asp.net内置控件上一起调用它。