C# 我能';无法在GridView的每个页面中显示分页,并将列表作为源

C# 我能';无法在GridView的每个页面中显示分页,并将列表作为源,c#,asp.net,linq,gridview,pagination,C#,Asp.net,Linq,Gridview,Pagination,我试图为具有LINQ生成列表的GridView设置分页,但尽管我编写的函数用于处理GridView中的OnPageIndexchange属性,以按计划显示记录,但当我导航到任何页面时,带有页码的页脚将消失。我想了解一下这方面的情况,因为我是C#和asp的新手,我不知道为什么会发生这种情况。我知道有很多方法可以做到这一点,有些方法涉及新建GridViewRow(),甚至使用自定义html生成EmptyDataTemplate,但我不太了解这些函数的作用。如果有人对我的代码发表评论,我将不胜感激 当

我试图为具有LINQ生成列表的GridView设置分页,但尽管我编写的函数用于处理GridView中的
OnPageIndexchange
属性,以按计划显示记录,但当我导航到任何页面时,带有页码的页脚将消失。我想了解一下这方面的情况,因为我是C#和asp的新手,我不知道为什么会发生这种情况。我知道有很多方法可以做到这一点,有些方法涉及
新建GridViewRow()
,甚至使用自定义html生成
EmptyDataTemplate
,但我不太了解这些函数的作用。如果有人对我的代码发表评论,我将不胜感激

当然,我已经使用AllowPaging true设置了GridView,我的寻呼机设置是:mode NumericFirstLast,Visible=true。当我调试代码时,页脚的可见性显示它是真的,但是页码消失了。 我的asp是这样的(不是全部,我只包括GridView的定义):


PaginarCol函数是这样的(我在这里大致重复我在Page_Load函数中使用的一些代码,因为我想用相同的源代码再次填充GridView:

protected void PaginarCol(object sender, GridViewPageEventArgs e)
        {
        GridCol.PageIndex = e.NewPageIndex;
        int numResultados, inicioResultados;
        matriculas identificacion = new     obtenerMatricula().getMatriculaDatos(User.Identity.Name);
        int idusuario = identificacion.matriculaId;
        obtenerAdeudos Lista = new obtenerAdeudos();
        List<Adeudos> ListaAdeudos = Lista.getAdeudosCol(idusuario);
        int maxResultados = ListaAdeudos.Count();
        numResultados = 10; inicioResultados = GridCol.PageIndex*10;
        List<Adeudos> filasAdeudos =     ListaAdeudos.Skip(inicioResultados).Take(numResultados).ToList();
        GridCol.DataSource = filasAdeudos;
        GridCol.DataBind();
        GridCol.BottomPagerRow.Visible = true;
        } 
受保护的void paginacol(对象发送方,GridViewPageEventArgs e)
{
GridCol.PageIndex=e.NewPageIndex;
国际货币基金组织,国际货币基金组织;
matriculas Identification=new obtenerMatricula().getMatriculaDatos(User.Identity.Name);
int-idusuario=identification.matriculaId;
obtenerAdeudos Lista=新obtenerAdeudos();
List listaadeudodos=Lista.getAdeudosCol(idusuario);
int maxResultados=listaadeududodos.Count();
numResultados=10;inicioResultados=GridCol.PageIndex*10;
List filasadeudodos=listaadeududodos.Skip(inicioResultados.Take(numResultados.ToList();
GridCol.DataSource=filasadeudodos;
GridCol.DataBind();
GridCol.BottomPagerRow.Visible=true;
} 

您的页码正在消失,因为在页面索引更改事件(
PaginarCol()
)中,由于
Skip()
Take()
调用,您只绑定了一页数据。由于网格仅绑定了一页数据,因此不需要页码,因此它们将消失

我的猜测是,既然您没有发布
页面加载
代码,那么您最初是在绑定整个列表,而不是使用
Skip()
Take())
只获取一页数据。这实际上会使网格意识到数据是有页的,而不是只有一页,因此当网格首次加载时,页码会出现

如果希望现有代码实际保持显示页码,请删除整行代码:

List<Adeudos> filasAdeudos =     
    ListaAdeudos.Skip(inicioResultados).Take(numResultados).ToList();
由于您的
PaginarCol()
方法正在通过此行更新网格的页面索引值:

GridCol.PageIndex = e.NewPageIndex;

重新绑定网格将确保选择正确的页码,并继续显示所有页码。

谢谢!我的问题是,我不知道如何进行实际分页,因为我读到,只需执行
GridView.PageIndex=e.NewPageIndex
即可o GridView,不是吗?否则页面链接会显示完全相同的列表,单击它们不会产生任何影响difference@gerardoflores-
GridCol.PageIndex=e.NewPageIndex;
应在更改页面索引时正确处理网格页面的更新。在
paginacol()中所需的一切
方法是将
NewPageIndex
设置为网格的
PageIndex
并重新绑定网格。谢谢,我现在意识到我是在一杯水中制造风暴。不知道我怎么会错过它!
GridCol.DataSource = ListaAdeudos;
GridCol.PageIndex = e.NewPageIndex;