VirtualPathUtility.ToAbsolute("~/ProductsList.aspx?CategoryId=" + Eval("CategoryID")) %>"><%# Eval("CategoryName")
Sounds like there is an issue in forming the URL. Currently, the URL formed is incorrect and thus when you try to move to that URL, no page is found and you get a 404 error.
Try this tip to get the correct URL:
Resolving Paths in a Multi-Folder WebSite[
^]
For now, it looks like the URL is trying to find the 'ProductsList.aspx' in the root folder. For once, try moving it there and see it.