使用c#分页DataGrid数据,Prev/Next不能工作

本文关键字:Next 不能 工作 Prev 分页 DataGrid 数据 使用 | 更新日期: 2023-09-27 18:12:37

好吧,我已经找遍了所有地方,尝试了几乎所有我能找到的建议,但到目前为止都没有任何效果。D:我的问题是:

我有一个DataGridTemplateItems,用户输入了两个TextBoxes,在点击按钮后填充了数据。我的按钮接受用户在两个TextBoxes中输入的两个日期,并从一个DataBase中提取这些日期之间的所有条目。这些条目随后显示在DataGrid中。我需要这个DataGrid做的是允许每页10行分页。所有我需要的是下一个前瞻链接去通过包含数据的页面。链接可以工作,但数据不会改变(Next不会转到下一页,数据保持不变)。我知道一个事实,在某些日期之间有超过10个Items条目,所以我知道数据应该根据它所处的页面而更改。此外,Next按钮似乎是无限的。为什么?谁来帮帮我。

现在,由于某种原因,当我从数据库中获取数据时,它开始时获取所有条目,但随后它只存储10个(这是我希望页面一次显示的数量)。数据从来没有显示出应该有……为什么? !D ':

使用c#分页DataGrid数据,Prev/Next不能工作

在设置数据源之前设置新页面索引

protected void dgArchive_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
    if (source != null)
    {
        dgArchive.CurrentPageIndex = e.NewPageIndex;
        JSP_Extrusion_QCEntities ent = new JSP_Extrusion_QCEntities(ConfigurationManager.ConnectionStrings["QCConnString"].ToString());
        DateTime start = Convert.ToDateTime(Start.Text);
        DateTime end = Convert.ToDateTime(End.Text).AddDays(1);
        AllDataSources ds = new AllDataSources();
        dgArchive.DataSource = ds.populateArchive(ent, start, end);
        dgArchive.DataBind();
    }
}

还有,为什么要在Page_Load上连接事件?如果你在标记上这样做,你就不需要这样做了。

这三行:

    GetDateEntries.Click += new EventHandler(GetDateEntries_Click);
    dgArchive.VirtualItemCount = 200;
    dgArchive.PageIndexChanged += new DataGridPageChangedEventHandler(dgArchive_PageIndexChanged);

应该在标记中声明。以下是如何从标记中为网格注册PageIndexChanged的方法。

<asp:DataGrid ID="dgArchive" CssClass="data" AutoGenerateColumns="False" runat="server" AllowPaging="true" 
PageSize="10" EnableViewState="true" AllowCustomPaging="true" Visible="false"
OnPageIndexChanged="dgArchive_PageIndexChanged"
>

下面是一个来自MSDN的例子

每次更改页面时都需要重新绑定网格。下面是一个示例,概述了您需要做的事情:

<asp:DataGrid ID="DataGrid1" runat="server" OnPageIndexChanged="DataGrid1_PageIndexChange" ...>

后台代码:

protected void DataGrid1_PageIndexChange(object sender, DataGridPageChangedEventArgs e)
{
    DataGrid1.CurrentPageIndex = e.NewPageIndex;
    BindDataGrid();
}
private void BindDataGrid()
{
    DataGrid1.DataSource = GetSomeData();
    DataGrid1.DataBind();
    int total = dt.Rows.Count;
    int pSize = grdJobs.PageSize;
    int pIndex = grdJobs.CurrentPageIndex;
    if (total < pSize) 
        pSize = total;
    int start = (pSize * pIndex) + 1;
    int end = (start + pSize) - 1;
    if (end > total) 
        end = total;
    lblTotalResults.Text = String.Format("Displaying {0}-{1} Of {2}", start, end, total);        
}

所以我的一个同事最后帮了我这个。好吧!这是我对DataGrid分页的最终结果。所有这些代码都允许我获取从数据库中提取的条目数,设置VirtualItemCount(它还设置显示的页面数),并在数据中分页。请注意,AllDataSources是一个单独的类,它只是以与我的网格设置一起工作的方式从数据库中提取数据,而CamSizerData是包含所有数据并用于获取计数的Table的名称。如果你还有什么问题,请提出来。:)

DataGrid

<asp:DataGrid ID="dgArchive" CssClass="data" AutoGenerateColumns="False" runat="server"
    AllowPaging="True" AllowCustomPaging="True" Visible="False" OnPageIndexChanged="dgArchive_PageIndexChanged">
    <Columns>
        <asp:TemplateColumn HeaderStyle-CssClass="infoHeaderDG" ItemStyle-CssClass="line">
            <HeaderTemplate>
                Line</HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="LineNumber" Text='<%# DataBinder.Eval(Container.DataItem, "LineNumber") %>'
                    runat="server" /></ItemTemplate>
            <HeaderStyle CssClass="infoHeaderDG"></HeaderStyle>
            <ItemStyle CssClass="line"></ItemStyle>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderStyle-CssClass="infoHeaderDG" ItemStyle-CssClass="date">
            <HeaderTemplate>
                Date</HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="CreateDate" Text='<%# DataBinder.Eval(Container.DataItem, "CreateDate", "{0: MM/dd/yyyy}") %>'
                    runat="server" /></ItemTemplate>
            <HeaderStyle CssClass="infoHeaderDG"></HeaderStyle>
            <ItemStyle CssClass="date"></ItemStyle>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderStyle-CssClass="infoHeaderDG" ItemStyle-CssClass="operator">
            <HeaderTemplate>
                Operator</HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="Operator" Text='<%# DataBinder.Eval(Container.DataItem, "Operator") %>'
                    runat="server" /></ItemTemplate>
            <HeaderStyle CssClass="infoHeaderDG"></HeaderStyle>
            <ItemStyle CssClass="operator"></ItemStyle>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderStyle-CssClass="infoHeaderDG" ItemStyle-CssClass="product">
            <HeaderTemplate>
                Product</HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="Product" Text='<%# DataBinder.Eval(Container.DataItem, "ProdNumber") %>' runat="server" /></ItemTemplate>
            <HeaderStyle CssClass="infoHeaderDG"></HeaderStyle>
            <ItemStyle CssClass="product"></ItemStyle>
        </asp:TemplateColumn>
    </Columns>
    <PagerStyle Mode="NumericPages" PageButtonCount="5" />
</asp:DataGrid>

代码后面

protected void Page_Load(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = true;
    }
    protected void GetDateEntries_Click(object sender, EventArgs e)
    {
        dgArchive.Visible = true;
        using (Entities ent = new Entities(ConfigurationManager.ConnectionStrings["QCConnString"].ToString()))
        {
            DateTime start = Convert.ToDateTime(Start.Text);
            DateTime end = Convert.ToDateTime(End.Text).AddDays(1);
            AllDataSources ds = new AllDataSources();
            CamsizerData cd = new CamsizerData();
            IEnumerable<CamsizerData> led = cd.GetBySelectedDates(ent, start, end);
            int counter = led.Count();
            dgArchive.VirtualItemCount = counter;
            dgArchive.DataSource = ds.populateArchive(ent, start, end);
            dgArchive.DataBind();
        }
    }
    protected void dgArchive_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        if (source != null)
        {                
            dgArchive.CurrentPageIndex = e.NewPageIndex;
            Entities ent = new Entities(ConfigurationManager.ConnectionStrings["QCConnString"].ToString());
            DateTime start = Convert.ToDateTime(Start.Text);
            DateTime end = Convert.ToDateTime(End.Text).AddDays(1);
            AllDataSources ds = new AllDataSources();
            IEnumerable<object> recs = ds.populateArchive(ent, start, end);
            dgArchive.DataSource = recs.Skip(10 * e.NewPageIndex);
            dgArchive.DataBind();
        }
    }