Hes 21, theyre not exactly known for being grateful , nor having much tact when it comes to getting gifts.
To some 21 year olds, £100 is a hell of alot of money, could be hes saving for something, paying off a debt or just wants to spend it on having a good time.
If hes not happy with the gift your brought out of generosity and love, then let him have what he would really like, which is the money, and I wouldnt begrudge him it, or play games...
Yes you spent time picking out something you thought he would like, but truth is he doesn't and at least there's been an element of honesty (even if the news didn't come from him)
Give him the refund money with the same love you gave the gift.
It might be that you picked something that wasn't quite his style, colour or fit. I would try not to take it too personally- I also think its much better this way than what most of us do... put said item in a cupboard and forget about it, or sell it on, give it away.
I always remember my mum buying a jumper I really didnt like when I was about 19, she was so pleased with it, i didn't have the heart to tell her I really didnt like it. It sat in my wardrobe mocking me for a couple of years and even when I did give it to charity in the end, the guilt was horrible and I can still remember every single thing about it now (almost ditto a coat she brought me that was like a bin liner, but wasn't so bad as I recall i did manage to wear it a few times)
How horrible to think a gift brought with love can make you feel this way, rather than just being up front.
If you really feel hurt by his actions, I would let your dp deal with gifts in the future, or just give the cash in the first place. I think 21 is a hard age to buy for anyway!