asp.net 如何在GridView上添加分页?

b5lpy0ml  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(124)

我有一个问题与GridView。即使我启用了AllowPaging,我仍然无法看到页码和浏览页面。数据是根据页面大小带来的,但是分页细节(比如页面的数量不会出现,所以我可以进一步导航)。

<asp:GridView ID="recItemsGrid" runat="server" AutoGenerateColumns="false" Width="100%" BorderColor="#f5f5f5"
                    BorderStyle="Solid" BorderWidth="1px" AllowPaging="true" PageSize="3" OnPageIndexChanging="recItems_OnPageIndexChanging">

个字符

uidvcgyl

uidvcgyl1#

好吧,使用内置分页器的问题是它仍然需要总行数。
所以,如果有100行,那么你的数据源必须返回100行,否则页码和计数都会被打乱。
现在,你在“猜”你的代码?您希望以正确的方式执行此操作,并且只从数据库中提取实际的行数。
您没有提到总行数。然而,如果总的原始数据拉取是说200行,那么我会让它流到内置的数据寻呼系统。
请记住,内置的数据寻呼机系统实际上作弊。它从来没有为你限制数据拉取,但只有通过限制有效负载(输出)到网页,使页面工作“合理”。
内置寻呼机吗嗯,好到最多约200或300行顶部。每次重新绑定时,您只需“馈送”数据源ALL THE ROWS。(这就是它的工作原理)。
如前所述,如果您的数据集大于200-300行,那么您可能应该转储内置的分页器,并滚动自己的分页器。这样,您只会为给定的页面提取行。
因此,要么删除试图只从数据源中提取行页面的代码,并始终向gv提供完整的数据集--这就是内置分页器的工作方式。
当你真正只拉取一页数据行的瞬间,那么页数将不起作用并且将全部错误,因为页数是由你拉取的数据集的大小决定的。
所以,假设这个工作:

<asp:GridView ID="GHotels" runat="server" CssClass="table table-hover" 
            AutoGenerateColumns="false"
            width="45%" DataKeyNames="ID" AllowPaging="True" 
            OnPageIndexChanging="GHotels_PageIndexChanging" PageSize="6"   >
            <Columns>
                <asp:BoundField DataField="FirstName" HeaderText="FirstName"  />
                <asp:BoundField DataField="LastName" HeaderText="LastName"    />
                <asp:BoundField DataField="HotelName" HeaderText="Hotel Name"    />
                <asp:BoundField DataField="Description" HeaderText="Description" ItemStyle-Width="270" />                
            </Columns>
            <PagerStyle CssClass="GridPager" />
        </asp:GridView>

字符串
后面的代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadData();
    }

    void LoadData()
    {
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            string strSQL = 
                @"SELECT * FROM tblHotels 
                  WHERE Description is not null 
                  ORDER BY HotelName";
            using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
            {
                DataTable rstData = new DataTable();
                conn.Open();
                rstData.Load(cmdSQL.ExecuteReader());
                GHotels.DataSource = rstData;
                GHotels.DataBind();
            }
        }
    }

    protected void GHotels_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GHotels.PageIndex = e.NewPageIndex;
        LoadData();
    }


您注意到非常接近实际上如何每次提取完整数据集。
结果是这样的:
x1c 0d1x的数据
所以,如果你要做真实的数据库分页(内置的寻呼机不做),那么你可能最好建立你自己的寻呼机系统)。它肯定会比内置系统表现得好得多,正如我所指出的,内置系统实际上并不限制拉取的数据,但每次只拉取所有行,并使用行计数来确定要放进寻呼机的页数。然后从FULL数据集中拉出行的页。
使用自己的分页器应该不是那么困难,其优点是性能非常好,特别是如果您使用SQL Server端数据分页功能。这就意味着,建议您可以对任何大小的数据库进行分页,并且您将只从数据库中提取一页数据和行。(SQL Server 2012或更高版本确实具有分页支持)。
我认为使用单选按钮列表将是一个很好的选择,控件呈现“x”个按钮,这也将因此在控件列表中自动突出显示“一个项目”(对于您所在的页码)。
你没提过你有多少排吗?但是,如果少于200,那么删除传递页码的代码,并始终将整个数据集输入GV,让寻呼机为您拉出一页。

相关问题