Of course, different approaches work differently for different kids. :) At that age, I did the same thing you said with DS (and now starting to with 19-month-old DD). They are only just barely learning the concept that you are giving them instructions ("hold my hand") and that there will be consequences ("or I'll pick you up and carry you"). I think they're way too young to get the reasons for instructions (you want them to be safe in the garden center).
I do exactly what you said, and then when she is throwing herself around in my arms, I'm big on distraction at this age. She does this every night on the way to the car at daycare. She wants to walk in the parking lot but doesn't understand holding my hand (she collapses into tears on the ground :) ). So when she cries in my arms I do something silly like spin around and make silly noises, or hold her upside down, or make a big deal about saying good bye to the big tree. Sometimes that's enough. Sometimes not. If not, I just talk to her calmly (which usually doesn't work :) ).
In a store situation, I'd bring distractions for that type of problem. Favorite toy, etc. If it doesn't help, I guess I go with how important the trip is. I usually stay, let them cry in the cart, try to give them distractions, and when all else fails, ignore and shop FAST!! :)
That was long-winded, but the bottom line for me is distraction. But just DON'T give in on the underlying consequences (they have to be carried if they won't hold your hand, you'll take away their toy if they keep throwing it, etc.)
Btw, at home, I usually ignore the tantrum because with my kids that's usually the fastest way it gets extinguished.
Good luck. I remember when DS (now 4-1/2) was this age. Up till that point, as he developed, DH and I would always say, "THIS is the best age." Then three months later when he'd learn something new, we'd say "THIS is the best age." When he hit about 18 months and started throwing tantrums, it was the first time we said, "This is NOT the best age!" hee hee! :)
L.