Page 1 of 1

Adding A Next and Previous link for Orders

Posted: Fri Nov 06, 2009 10:58 am
by Mike718NY
I need to add a "Previous" and "Next" link to move through the orders easier
than having to click "Orders" each time to look at another order.
This is a good feature to have and I'm sure someone else has done it already.
I can't get mine to work. Here's the Previous link:

<div class="caption">
<h1><asp:Localize ID="Caption" runat="server" Text="Order #{0} - {1}" EnableViewState="false"></asp:Localize>
&nbsp;&nbsp;<asp:LinkButton runat="server" ID="lnkPrev"> Previous </asp:LinkButton>

protected void lnkPrev_Click(object sender, EventArgs e)
{
int orderId = (AlwaysConvert.ToInt(Request.QueryString["OrderId"]) - 1);

Response.Redirect(String.Format("ViewOrder.aspx?OrderNumber={0}&OrderId={1}", orderId, orderId));
This didn't work either:
Response.Redirect("ViewOrder.aspx?OrderNumber=" +orderId.ToString()+ "&OrderId="+orderId.ToString());
}

I'm guessing it's something with the postback.
Is there a difference between "OrderNumber" and "OrderId"? Should they be the same number?

Re: Adding A Next and Previous link for Orders

Posted: Fri Nov 06, 2009 8:43 pm
by AbleMods
Mike718NY wrote:Is there a difference between "OrderNumber" and "OrderId"? Should they be the same number?
No. You're mixing the two and they are unfortunately not interchangable.

Only the OrderId is required - try this:

Code: Select all

Response.Redirect(String.Format("ViewOrder.aspx?OrderId={0}", orderId));

Re: Adding A Next and Previous link for Orders

Posted: Sat Nov 07, 2009 7:42 am
by Mike718NY
The problem was really that the "protected void lnkPrev_Click" event wasn't being fired.
But, I found another way to implement this that works.
It appears in the breadcrumb too (see pic). Here it is if anyone is interested:

File: Admin\UserControls\AdminBreadCrumbs.ascx

Code: Select all

<div class="breadCrumbsPanel">
<asp:SiteMapPath ID="BreadCrumbs" runat="server" OnItemDataBound="BreadCrumbs_ItemDataBound">
<CurrentNodeStyle Font-Underline="false" Font-Bold="true" /><PathSeparatorTemplate>&nbsp;>&nbsp;</PathSeparatorTemplate>
</asp:SiteMapPath>

ADD THIS:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:HyperLink runat="server" Visible="false" ID="hypPrev">
<font class="gold13"><<&nbsp;PREVIOUS ORDER</font></asp:HyperLink>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:HyperLink runat="server" Visible="false" ID="hypNext">
<font class="gold13">NEXT ORDER&nbsp;>></font></asp:HyperLink>

TO HERE
</div>

In code behind:

Code: Select all


                case "ViewOrder.aspx":
                case "EditOrderItems.aspx":
                case "ViewDigitalGoods.aspx":
                    Order order = GetOrder();
                    if (order != null)
                    {

ADD THIS: 
                      hypPrev.Visible = true;
                      hypNext.Visible = true;
                      hypPrev.NavigateUrl = Request.Url.AbsolutePath + "?OrderNumber=" + Convert.ToString(order.OrderNumber - 1) + "&OrderId=" + Convert.ToString(order.OrderId - 1);
                      hypNext.NavigateUrl = Request.Url.AbsolutePath + "?OrderNumber=" + Convert.ToString(order.OrderNumber + 1) + "&OrderId=" + Convert.ToString(order.OrderId + 1);

TO HERE

                        // ORDER FOUND, VERIFY CONTROLS IN SITEMAPNODE
                        if (e.Item.Controls.Count > 0)
                        {
 

I don't have error checking for "out of range" but I really don't care about that right now.
If you go to page "0" by hitting "Previous" on Order "1", you will get an error.

Re: Adding A Next and Previous link for Orders

Posted: Thu Nov 19, 2009 9:03 am
by mazhar
Also you can use this mod as well for quick direct jumps via order numbers
viewtopic.php?f=45&t=9233

Re: Adding A Next and Previous link for Orders

Posted: Thu Nov 19, 2009 11:49 am
by Mike718NY
I updated this and it works better (but still doesn't check for "out of range"):

Code: Select all

        ........................
        case "Default.aspx":
          if (!(e.Item.SiteMapNode.Url.EndsWith("Shipments/Default.aspx")
              || e.Item.SiteMapNode.Url.EndsWith("Payments/Default.aspx")))
          {
            // BREAK AND DONT FALL IN NEXT CASE
            break;
          }
          else goto case "ViewOrder.aspx"; // GO TO NEXT SAME CASE

      // ************ [color=#4040FF]Here is where you start the changes:[/color]

      // It was this, so you need to delete these 3 cases and add the ones below:
                case "ViewOrder.aspx":
                case "EditOrderItems.aspx":
                case "ViewDigitalGoods.aspx":
   
     // I just made them all individual cases, replace above with these:

        case "ViewOrder.aspx":
          Order order2 = GetOrder();
          if (order2 != null)
          {
            hypPrev.Visible = true;
            hypNext.Visible = true;
            hypPrev.NavigateUrl = ResolveUrl("~") + "Admin/Orders/ViewOrder.aspx?OrderNumber=" + Convert.ToString(order2.OrderNumber - 1) + "&OrderId=" + Convert.ToString(order2.OrderId - 1);
            hypNext.NavigateUrl = ResolveUrl("~") + "Admin/Orders/ViewOrder.aspx?OrderNumber=" + Convert.ToString(order2.OrderNumber + 1) + "&OrderId=" + Convert.ToString(order2.OrderId + 1);
            // keep works hypNext.NavigateUrl = Request.Url.AbsolutePath + "?OrderNumber=" + Convert.ToString(order2.OrderNumber + 1) + "&OrderId=" + Convert.ToString(order2.OrderId + 1);

            // ORDER FOUND, VERIFY CONTROLS IN SITEMAPNODE
            if (e.Item.Controls.Count > 0)
            {
              // DETERMINE IF WE HAVE A LINK OR A LITERAL
              if (e.Item.Controls[0].GetType().Equals(typeof(HyperLink)))
              {
                HyperLink link = (HyperLink)e.Item.Controls[0];
                link.NavigateUrl += "?OrderNumber=" + order2.OrderNumber.ToString() + "&OrderId=" + order2.OrderId.ToString();
                link.Text = string.Format(link.Text, order2.OrderNumber);
              }
              else if (e.Item.Controls[0].GetType().Equals(typeof(Literal)))
              {
                Literal literal = (Literal)e.Item.Controls[0];
                literal.Text = string.Format(literal.Text, order2.OrderNumber);
              }
            }
          }
          break;

        case "EditOrderItems.aspx":
          Order order3 = GetOrder();
          if (order3 != null)
          {
            // ORDER FOUND, VERIFY CONTROLS IN SITEMAPNODE
            if (e.Item.Controls.Count > 0)
            {
              // DETERMINE IF WE HAVE A LINK OR A LITERAL
              if (e.Item.Controls[0].GetType().Equals(typeof(HyperLink)))
              {
                HyperLink link = (HyperLink)e.Item.Controls[0];
                link.NavigateUrl += "?OrderNumber=" + order3.OrderNumber.ToString() + "&OrderId=" + order3.OrderId.ToString();
                link.Text = string.Format(link.Text, order3.OrderNumber);
              }
              else if (e.Item.Controls[0].GetType().Equals(typeof(Literal)))
              {
                Literal literal = (Literal)e.Item.Controls[0];
                literal.Text = string.Format(literal.Text, order3.OrderNumber);
              }
            }
          }
          break;

        // **** This case didn't change but check anyway:         

        case "ViewDigitalGoods.aspx":
          Order order = GetOrder();
          if (order != null)
          {
            // ORDER FOUND, VERIFY CONTROLS IN SITEMAPNODE
            if (e.Item.Controls.Count > 0)
            {
              // DETERMINE IF WE HAVE A LINK OR A LITERAL
              if (e.Item.Controls[0].GetType().Equals(typeof(HyperLink)))
              {
                HyperLink link = (HyperLink)e.Item.Controls[0];
                link.NavigateUrl += "?OrderNumber=" + order.OrderNumber.ToString() + "&OrderId=" + order.OrderId.ToString();
                link.Text = string.Format(link.Text, order.OrderNumber);
              }
              else if (e.Item.Controls[0].GetType().Equals(typeof(Literal)))
              {
                Literal literal = (Literal)e.Item.Controls[0];
                literal.Text = string.Format(literal.Text, order.OrderNumber);
              }
            }
          }
          break;

      // ************ stop changes.

        case "ViewTracking.aspx":
        ...........................