使用 C# 对 DataGrid 数据进行分页,上一页/下一页不起作用

问题描述 投票:0回答:3

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

我有一个

DataGrid
TemplateItems
,用户已输入两个
TextBoxes
,单击按钮后会填充数据。我的按钮接受用户在两个
TextBoxes
中输入的两个日期,并从
DataBase
中提取这些日期之间的所有条目。然后,条目将显示在
DataGrid
中。我需要这个
DataGrid
来实现每页 10 行的分页。我所需要的只是 NextPrev 链接来浏览包含数据的页面。链接有效,但数据不变(Next 不会转到下一页,数据保持不变)。我知道在某些日期之间有超过 10 个
Items
条目,所以我知道数据应该根据其所在的页面而变化。此外,“下一步”按钮似乎是无限的。为什么?有人请帮帮我吗 现在由于某种原因,当我从数据库获取数据时,它首先获取所有条目,但随后只存储 10 个(这是我希望页面一次显示的数量)。数据从未显示出应该存在的其余部分......为什么?! D':

c# asp.net pagination datagrid
3个回答
1
投票

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 上连接事件?如果您在标记上执行此操作,则无需执行此操作。

这3行:

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 的示例。


0
投票

<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); }



0
投票
DataGrid

。所有这些代码都允许我获取从数据库中提取的项目数、设置 VirtualItemCount(它还设置显示的页面数)以及对数据进行分页。请注意,AllDataSources 是一个单独的类,它只是以适合我的网格设置的方式从数据库中提取数据,而 CamSizerData 是包含所有数据并用于获取计数的

Table
的名称。 如果您还有其他疑问,请随时询问。 :)

数据网格

<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(); } }

	
© www.soinside.com 2019 - 2024. All rights reserved.