我正在尝试为具有LINQ生成列表的GridView设置分页,但是我在GridView中编写处理OnPageIndexChanging
属性的函数按计划显示记录,页脚的页脚数当我导航到任何页面时消失。我很欣赏这方面的一些方向,因为我是C#和asp的新手,我不知道为什么会发生这种情况。我意识到有很多方法可以做到这一点,有些涉及new GridViewRow()
甚至用自定义html生成EmptyDataTemplate
,但我不太明白这些函数的用途。如果有人评论我的代码,我很遗憾,我会很感激。
我当然使用AllowPaging设置了GridView,我的Pager设置为:mode NumericFirstLast,Visible = true。当我调试代码时,页脚可见性显示它是真的,但页码数量消失了。 我的asp就像这样(并非所有我只包含GridView的定义):
<asp:GridView ID="GridCol" runat="server" DataKeyNames="identMovimiento"
AllowPaging="True" ShowFooter="True" OnDataBound="GridCol_DataBound" OnPageIndexChanging="PaginarCol">
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;
}
答案 0 :(得分:1)
您的页码正在消失,因为在页面索引更改事件(PaginarCol()
)中,由于Skip()
和Take()
调用,您只能绑定一页数据。由于网格只与一页数据绑定,因此不需要页码,因此它们会消失。
我的猜测是,由于您没有发布Page_Load
代码,因此您最初是绑定整个列表而不是使用Skip()
和Take()
来获取一页数据。这实际上会导致网格意识到有数据页而不是只有一页,因此在首次加载网格时会出现页码。
如果您希望现有代码实际显示页码,请删除整行:
List<Adeudos> filasAdeudos =
ListaAdeudos.Skip(inicioResultados).Take(numResultados).ToList();
现在只需直接绑定到ListaAdeudos
,就像这样:
GridCol.DataSource = ListaAdeudos;
由于您的PaginarCol()
方法正在通过以下行更新网格的网页索引值:
GridCol.PageIndex = e.NewPageIndex;
重新绑定网格将负责选择正确的页码,并继续显示所有页码。