What you are asking for is not easy, the question seems simple, but the answer might take pages of text to explain to someone new. Let me try to shed some light on why what you did didn't work, and that should help you figure out how to make it work.
See this:
{foreach from=$products item=product name=products}--starts an array loop through the items.
So anything called inside this like {$product.productcode|escape} will spit out the current product code for this iteration of the loop.
{/foreach}--Ends the loop.
So to do what you want (This is an example not actual code)
Code:
<tr>
{foreach from=$products item=product name=products}
<td>{$product.productcode|escape}</td>
{/foreach}
</tr>
The problem with this mindset, is it doesn't allow for starting another row. What if you had 10 products, or 100?
What I directed you to before "
Number of columns to display the product list" should activate a template called products_t.tpl. take a look at this to see how a properly formatted table with multiple columns is handled.
I think you are only struggling with this due to template customizations.
Perhaps you should switch templates back to a default one, just to observe the behavior of multi-column formatting of products, as controlled by the number of columns setting in the admin. I don't think any designer should have interfered with this basic functionality when building the template.
I know this probably raises more questions than it answers...but hopefully some of it makes sense.