I did a small print job for a well known charity a few years ago and offered them a sizable discount because I thought it was the "right thing to do". After emailing them a few proofs, they apologised and said they didn't have the budget anymore, so the job wasn't going ahead. I didn't get paid, but a week later, one of their workers handed me a flyer in the street... it was my design!
Since then, I treat charities the same as everyone else. There is a difference between doing a paid job and sponsoring a good cause. Make sure you know that difference!