Das Problem tritt auf, wenn Sie eine Seite mit nur einem Datensatz öffnen. Es füllt das NavMenu mit drei Links; "First", "1" und "Last".Paging in ASP.NET; die Anzahl der Seiten ändert sich nach dem Filtern nie
Wenn Sie eine Suchanfrage ausführen, die mehr als eine Seite zurückgibt, werden aus irgendeinem Grund immer nur "First", "1" und "Last" angezeigt. Wenn Sie mit vier Seiten beginnen und Ihre nachfolgende Suchanfrage nur zwei Datensätze zurückgibt, werden weiterhin "Erste", "1", "2", "3", "4" und "Letzte" angezeigt. Aus irgendeinem Grund, egal wie viele Seiten Sie beginnen, werden Sie immer bekommen. Wie können Sie den Seitenzähler/das Display zurücksetzen?
Hier ist meine C# -Code-behind:
public void RunTheSearch()
{
//Run the Stored Procedure first
SqlConnection connection2 = new SqlConnection(strCon1);
SqlCommand cmd2 = new SqlCommand();
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.CommandText = "sp_Search";
cmd2.Connection = connection2;
//--- A bunch of code that returns a dataset. Lengthy and unnecessary to my issue
connection2.Open();
SqlDataAdapter adp = new SqlDataAdapter(cmd2);
DataSet ds = new DataSet();
adp.Fill(ds, "OLDPages");
//Pagination code so only a set number of records loads at a time.
// Done to speed up the loading, since this list gets really long.
PagedDataSource pds = new PagedDataSource();
pds.DataSource = ds.Tables["OLDPages"].DefaultView;
pds.AllowPaging = true;
pds.PageSize = 10;
//NavMenu.Items.Clear();
int currentPage;
if (Request.QueryString["page"] != null)
{
currentPage = Int32.Parse(Request.QueryString["page"]);
}
else
{
currentPage = 1;
}
pds.CurrentPageIndex = currentPage - 1;
//Label1.Text = "Page " + currentPage + " of " + pds.PageCount;
if (!pds.IsFirstPage)
{
MenuItem itemMessage = NavMenu.FindItem("First");
itemMessage.NavigateUrl = Request.CurrentExecutionFilePath + "?page=1";
}
AcctRepeater.DataSource = pds;
AcctRepeater.DataBind();
CreatePagingControl(pds.PageCount, pds.CurrentPageIndex);
// End of Pagination code
connection2.Close();
}
private void CreatePagingControl(int PCount, int PIndex)
{
int PIndex2 = 0;
int SCounter = PIndex + 1;
int RowCount = PCount;
//Allow the pagination menu to always start 5 less than the current page you're on
if (PIndex < 5)
{
PIndex2 = 0;
}
else
{
PIndex2 = PIndex - 5;
}
// Show 10 total page numbers. You can increase or shrink that range by changing the 10 to whatever number you want
for (int i = PIndex2; i < PIndex2 + 10 && i < PCount; i++)
{
NavMenu.Items.Add(new MenuItem
{
Text = (i + 1).ToString(),
NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (i + 1).ToString()
});
// Now determine the selected item so the proper CSS can be applied
foreach (MenuItem item in NavMenu.Items)
{
item.Selected = item.Text.Equals(SCounter.ToString());
}
}
NavMenu.Items.Add(new MenuItem
{
Text = "Last",
NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (PCount)
});
}
Und auf der aspx Seite:
<asp:Menu ID="NavMenu" runat="server" CssClass="menu"
IncludeStyleBlock="false" Orientation="Horizontal" width="703px"
BackColor="#CC3300" EnableViewState="true">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="First" Selectable="true" />
</Items>
</asp:Menu>
Ich versuche NavMenu.Items.Clear(), aber es hat nicht so, weil Es löschte auch das hartcodierte Element auf der Aspx-Seite.
Anstelle von 'Clear()' können Sie 'Remove (MenuItem)' verwenden, um 'MenuItems' selektiv zu entfernen. – ctumturk
Können Sie Ihre Methode zum Laden von Seiten posten? –