Adding A Next and Previous link for Orders

For general questions and discussions specific to the AbleCommerce 7.0 Asp.Net product.
Post Reply
Mike718NY
Commodore (COMO)
Commodore (COMO)
Posts: 485
Joined: Wed Jun 18, 2008 5:24 pm

Adding A Next and Previous link for Orders

Post by Mike718NY » Fri Nov 06, 2009 10:58 am

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?

User avatar
AbleMods
Master Yoda
Master Yoda
Posts: 5170
Joined: Wed Sep 26, 2007 5:47 am
Location: Fort Myers, Florida USA

Re: Adding A Next and Previous link for Orders

Post by AbleMods » Fri Nov 06, 2009 8:43 pm

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));
Joe Payne
AbleCommerce Custom Programming and Modules http://www.AbleMods.com/
AbleCommerce Hosting http://www.AbleModsHosting.com/
Precise Fishing and Hunting Time Tables http://www.Solunar.com

Mike718NY
Commodore (COMO)
Commodore (COMO)
Posts: 485
Joined: Wed Jun 18, 2008 5:24 pm

Re: Adding A Next and Previous link for Orders

Post by Mike718NY » Sat Nov 07, 2009 7:42 am

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.

User avatar
mazhar
Master Yoda
Master Yoda
Posts: 5084
Joined: Wed Jul 09, 2008 8:21 am
Contact:

Re: Adding A Next and Previous link for Orders

Post by mazhar » Thu Nov 19, 2009 9:03 am

Also you can use this mod as well for quick direct jumps via order numbers
viewtopic.php?f=45&t=9233

Mike718NY
Commodore (COMO)
Commodore (COMO)
Posts: 485
Joined: Wed Jun 18, 2008 5:24 pm

Re: Adding A Next and Previous link for Orders

Post by Mike718NY » Thu Nov 19, 2009 11:49 am

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":
        ...........................


Post Reply