好吧,我已经到处寻找并尝试了几乎所有我能找到的建议,但到目前为止没有任何效果。 D:这是我的问题:
我有一个
DataGrid
和 TemplateItems
,用户已输入两个 TextBoxes
,单击按钮后会填充数据。我的按钮接受用户在两个 TextBoxes
中输入的两个日期,并从 DataBase
中提取这些日期之间的所有条目。然后,条目将显示在 DataGrid
中。我需要这个 DataGrid
来实现每页 10 行的分页。我所需要的只是 Next 和 Prev 链接来浏览包含数据的页面。链接有效,但数据不变(Next 不会转到下一页,数据保持不变)。我知道在某些日期之间有超过 10 个 Items
条目,所以我知道数据应该根据其所在的页面而变化。此外,“下一步”按钮似乎是无限的。为什么?有人请帮帮我吗
现在由于某种原因,当我从数据库获取数据时,它首先获取所有条目,但随后只存储 10 个(这是我希望页面一次显示的数量)。数据从未显示出应该存在的其余部分......为什么?! D':
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"
>
<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
的名称。 如果您还有其他疑问,请随时询问。 :)数据网格
<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();
}
}