Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET:删除行时分页_C#_Asp.net_Gridview - Fatal编程技术网

C# ASP.NET:删除行时分页

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

我有一个datagrid,可以在其中删除一行(使用ajax)。在以下情况下,我无法使用寻呼机:

假设我的页面大小是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是用正确的页面索引调用的,但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内置控件上一起调用它。