ASP.NET C#中GridView分页控件不显示问题求助
ASP.NET GridView分页控件不显示问题排查
问题描述
当数据集行数超过10行时,已配置GridView分页参数,但底部分页页码未显示,分页功能无法正常生效。
前端GridView标记代码
<asp:GridView ID="grvGroup" runat="server" AutoGenerateColumns="False" Width="100%" AllowPaging="True" PageSize="10" CssClass="mydatagrid" OnRowDataBound="grvGroup_RowDataBound" OnRowDeleting="grvGroup_RowDeleting" OnRowCommand="grvGroup_RowCommand" DataKeyNames="No" OnPageIndexChanging="grvGroup_PageIndexChanging" PagerStyle-HorizontalAlign="Center" PagerSettings-Mode="NumericFirstLast" PagerSettings-Visible="True"> <Columns> <asp:ButtonField CommandName="Select" ButtonType="Button" ControlStyle-CssClass="Edit_btn" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="5px" HeaderStyle-Width="5px" /> <asp:BoundField HeaderText="Sl.No." ItemStyle-Width="5px" HeaderStyle-Width="5px" DataField="No" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" /> <asp:BoundField HeaderText="InvoiceNumber" ItemStyle-Width="100px" HeaderStyle-Width="100px" DataField="InvoiceNumber" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" /> <asp:BoundField HeaderText="Vou Date" ItemStyle-Width="80px" HeaderStyle-Width="80px" DataField="CDate" HeaderStyle-HorizontalAlign="Left" DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="False" ItemStyle-HorizontalAlign="Left" /> <asp:BoundField HeaderText="BankName" ItemStyle-Width="130px" HeaderStyle-Width="130px" DataField="BankName" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" /> </Columns> <EmptyDataRowStyle HorizontalAlign="Center" /> <HeaderStyle CssClass="header" /> <PagerStyle CssClass="pager" /> <RowStyle CssClass="rows" /> <AlternatingRowStyle CssClass="row-alt" /> </asp:GridView>
后端数据绑定代码
private void BindData(long refNo = 0, int pageIndex = 0) { try { int pageSize = grvGroup.PageSize; // Get the page size DataSet Data = CommonClass.DSWriteToTable( _GetBank( refNo, pageIndex, pageSize) ); if (Data != null && Data .Tables.Count > 1) { DataTable dt = Data .Tables[1]; if (dt.Rows.Count > 0) { grvGroup.AllowPaging = true; grvGroup.PageSize = 10; grvGroup.Visible = true; grvGroup.PageIndex = pageIndex; grvGroup.DataSource = dt; grvGroup.DataBind(); } else { grvGroup.Visible = false; } if (Data .Tables.Count > 2 && Data .Tables[2].Rows.Count > 0) { int totalRows = Convert.ToInt32(Data .Tables[2].Rows[0]["Counts"]); int totalPages = (int)Math.Ceiling((double)totalRows / pageSize); ViewState["TotalPages"] = totalPages; } } } catch (Exception ex) { } }
排查原因及解决方案
核心原因
你采用了手动分页逻辑,从数据库仅获取当前页的10条数据绑定到GridView,但GridView默认通过绑定的DataSource记录数判断是否显示分页控件。由于当前页数据量等于PageSize,GridView无法感知总数据量超过10条,因此不会渲染分页控件。
解决步骤
设置VirtualItemCount属性
在获取总数据条数totalRows后,将其赋值给GridView的VirtualItemCount属性,明确告知GridView总数据量:if (Data .Tables.Count > 2 && Data .Tables[2].Rows.Count > 0) { int totalRows = Convert.ToInt32(Data .Tables[2].Rows[0]["Counts"]); int totalPages = (int)Math.Ceiling((double)totalRows / pageSize); ViewState["TotalPages"] = totalPages; // 新增:设置总数据量,让GridView识别需要分页 grvGroup.VirtualItemCount = totalRows; }完善PageIndexChanging事件处理
确保分页切换事件正确调用BindData并传入新页码,示例代码:protected void grvGroup_PageIndexChanging(object sender, GridViewPageEventArgs e) { // 保留原查询条件refNo(如果有) BindData(0, e.NewPageIndex); }检查CSS样式
确认.pager类未设置display: none或其他隐藏样式,避免分页控件被CSS隐藏:/* 确保分页控件可见 */ .pager { display: block; /* 其他自定义样式 */ }验证分页参数一致性
确保前端PageSize设置(10)和后端代码中grvGroup.PageSize = 10保持一致,避免参数不匹配导致分页逻辑异常。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

